今天看了下类,函数有两种定义的形式:只有形式参数self与不仅有self还有其他参数。两种的区别我用程序来展现,假设用一个类来说明Tom和Jerry玩一个游戏,他们的得分:
def __ init__(self) 形式
class Game: # 定义类Game
def __init__(self): # 创建类中的函数,也叫方法
self.name = None
self.score = None
def print_score(self):
print("%s score is %s" % (self.name,self.score))
s1 = Game() # 创建对象s1
s1.name = "Tom"
s1.score = 8
s2 = Game() # 创建对象s2
s2.name = "Jerry"
s2.score = 7
s1.print_score()
s2.print_score()
这种形式在__init__方法中,只有一个self,指的是实例的本身,但是在方法的类部,包含两个属性,name, score。它允许定义一个空的结构,当新数据来时,可以直接添加。实例化时,需要实例化之后,再进行赋值。
def init(self, 参数1,参数2,···,参数n) 形式
class Game: # 定义类Game
def __init__(self, name, score): # 创建类中的函数,也叫方法
self.name = name
self.score = score
def print_score(self):
print("%s score is %s" % (self.name,self.score))
s1 = Game("Tom", 8) # 创建对象s1
s2 = Game("Jerry", 7) # 创建对象s2
s1.print_score()
s2.print_score()
这种形式在定义方法时,就直接给定了两个参数name和score,且属性值不允许为空。实例化时,直接传入参数。
总结:
- self是形式参数,当执行s1 = Game(“Tom”, 8)时,self等于s1;当执行s2 = Game(“Jerry”, 7)时,self=s2。
- 两种方法的区别在于定义函数时属性赋值是否允许为空和实例化时是否直接传入参数,个人觉得第二种更为简洁。