组合(将需要的类一起进行实例化并放入新的类中)
实例:
1 class Turtle: 2 def __init__(self,x): 3 self.num = x 4 5 class Fish: 6 def __init__(self,x): 7 self.num = x 8 9 class Pool: 10 def __init__(self,x,y): 11 self.turtle = Turtle(x) 12 self.fish = Fish(y) 13 14 def print_num(self): 15 print('水池里一共有乌龟 %d 条,鱼 %d 条' % (self.turtle.num,self.fish.num)) 16 17 >>> pool = Pool(5,2) 18 >>> pool.print_num() 19 水池里一共有乌龟 5 条,鱼 2 条
•现在要求定义一个类,叫水池,水池里要有乌龟和鱼。
类、类对象和实例对象
以下例子可见,对实例对象c的count属性赋值后,就相当于覆盖了类对象C的count属性。如果没有赋值覆盖,那么引用的是类对象的count属性
1 >>> a = C() 2 >>> b = C() 3 >>> c = C() 4 >>> print(a.count,b.count,c.count) 5 0 0 0 6 >>> c.count += 10 7 >>> print(a.count,b.count,c.count) 8 0 0 10 9 >>> C.count += 100 10 >>> print(a.count,b.count,c.count) 11 100 100 10
另外,如果属性的名字跟方法名相同,属性会覆盖方法:
1 >>> class C: 2 def x(self): 3 print('X-man') 4 5 6 >>> c = C() 7 >>> c.x() 8 X-man 9 >>> c.x = 1 #新定义对象c的一个x属性,并赋值为1 10 >>> c.x 11 1 12 >>> c.x() #可见,方法x()已经被属性x给覆盖了 13 Traceback (most recent call last): 14 File "<pyshell#8>", line 1, in <module> 15 c.x() 16 TypeError: 'int' object is not callable
结论:不要试图在一个类里边定义出所有能想到的特性和方法,应该利用继承和组合机制来进行扩展;用不同的词性命名,如属性名用名词、方法名用动词,并使用骆驼命名法等。
到底什么是绑定?
实例1:(python严格要求需要有实例才能被调用,即绑定概念)
1 >>> class BB: 2 def printBB(): #缺少self,导致无法绑定具体对象 3 print('no zuo no die') 4 5 6 >>> BB.printBB() 7 no zuo no die 8 >>> bb = BB() 9 >>> bb.printBB() #出现错误原因是由于绑定机制,自动把bb对象作为第一个参数传入 10 Traceback (most recent call last): 11 File "<pyshell#15>", line 1, in <module> 12 bb.printBB() 13 TypeError: printBB() takes 0 positional arguments but 1 was given
•Python严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。
标签:count,10,num,Python,self,拾遗,039,__,print From: https://www.cnblogs.com/ybqjymy/p/17650591.html