1什么是组合?
把类的对象放在一个新类里面
class A: def __init__(self,x): self.n=x class B: def __init__(self,x): self.n=x class C: def __init__(self): self.a=A(1) self.b=B(2) print(self.a.n) print(self.b.n)
>>> c=C() 1 2
2
>>> class A: n=1 >>> a=A() >>> a.n=10 >>> a.n 10 #直接改变了内部属性的值
3.通过类名改变属性的值会发生什么?
>>> class A: n=1下面这段程序很正常
>>> a=A() >>> b=A() >>> c=A() >>> a.n 1 >>> b.n 1 >>> c.n 1下面这段程序很正常
>>> a.n=2 >>> a.n 2 >>> b.n 1 >>> c.n 1
下面这段程序不太正常
>>> A.n=10 >>> a.n 2 >>> b.n 10 >>> c.n 10为什么a.n没有改变?对象本身的属性覆盖了类的属性
5.对 对象中没有的变量赋值会出现什么情况?会添加这个属性
>>> class C: a=1 >>> c=C() >>> c.b=1 >>> c.a 1 >>> c.b 1
4.属性的名字和方法的名字相同会出现什么情况?
后面的会覆盖前面的
>> c=C() >>> c.x <bound method C.x of <__main__.C object at 0x040C8BF0>> (没有变量x,只有函数x) >>> c.x() 哈哈
>>> class C: def x(self): print("哈哈") x=1 >>> c=C() >>> c.x 1
>>> c.x() Traceback (most recent call last): File "<pyshell#66>", line 1, in <module> c.x() TypeError: 'int' object is not callable (没有函数x只有变量x)
5.如何查看对象的属性? 对象名.__dict__
>>> class A: x=1 >>> a=A() >>> a.y=2 >>> a.__dict__ {'y': 2}
6.什么是绑定?
当对象为该类中的变量赋值时,它的属性中才有他们的内容。在对象的外部对对象的属性中没有的变量赋值(添加属性)也算。