__init__的意思是初始化,也就是输入的量。
[code language=python]
class Person:
def __init__(self, n, a):
self.name = n
self.age = a
[/code]
这个类有两个输入变量,第一个参数self指的是person,n和a是输入变量
[code language=python]
def desc(self2):
print(“我叫%s,今年%d岁” % (self2.name,self2.age))
[/code]
__init__以外的定义,是输出量。第一个参数参数self2指的是person,所以self2.name和self2.age就是初始化中赋予的self.name = n和self.age=a
最后调用这个类
[code language=python]
Person(‘小明’, 13).p1.desc()
Person(‘小红’, 14).p2.desc()
[/code]
输出
我叫小明,今年13岁
我叫小红,今年14岁
上面为了区分,使用了a,n和self2。 下面使用实际惯例完整写一遍
[code language=python]
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def desc(self):
print(“我叫%s,今年%d岁” % (self.name,self.age))
p1=Person(‘小明’, 13)
p2=Person(‘小红’, 14)
p1.desc()
p2.desc()
[/code]
@staticmethod和@classmethod的区别:
class A(object): @staticmethod def foo1(name): print ('foo1', name) def foo2(self, name): print ('foo2', name) return(self.foo1(name)) @classmethod def foo3(cls, name): print ('foo3', name) return(cls().foo1(name))#@classmethod可以调用类 a = A() a.foo1('ok') A().foo1('ok') A.foo1('ok')#@staticmethod允许类直接作为实例 a.foo2('ok') A().foo2('okok') a.foo3('ok') A().foo3('okok') A.foo3('okokok')#@classmethod允许类直接作为实例
class A(object):
@staticmethod
def foo1(name):
print (‘foo1’, name)
def foo2(self, name):
print (‘foo2’, name)
return(self.foo1(name))
@classmethod
def foo3(cls, name):
print (‘foo3’, name)
return(cls().foo1(name))