对象嵌套
把对象作为另外一个对象的参数传递给方法或者变量。
class A:
def __init__(self,name,age):
self.name = name
self.age = age
class B:
lst = []
def add_list(self,obj):
self.lst.append(obj)
def for_by_A(self):
for i in self.lst:
print(i.name,i.age)
a1 = A("张三", 1)
a2 = A("李四", 11)
a3 = A("王五", 111)
b = B()
b.add_list(a1)
b.add_list(a2)
b.add_list(a3)
b.for_by_A()
魔术方法
在Python的类中存在一些特殊的方法,这些方法都是 __方法__
格式,这种拥有特殊功能的方法统称为魔术方法
-_init_,初始化方法,用于加载类初始化数据用的,没有需要初始化的数据时可省略不写
class A:
def __init__(self):
pass
- __new__构造方法,对象创建时会调用此方法,此方法会创建一个空对象返回给__init__函数调用
class A:
def __new__(cls, *args, **kwargs):
pass
- __call__方法,用于重载(),可以使得对象通过()执行方法
class A:
def __call__(self,name):
print(name)
a = A()
a("lose") # lose
__str__
方法:当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
class A:
def __str__(self):
return "0"
a = A()
print(a) # "0"
__dict__
:该属性可以用类名或者类的实例对象来调用,用类名直接调用 dict,会输出该由类中所有类属性组成的字典;而使用类的实例对象调用 dict,会输出由类中所有实例属性组成的字典。__getitem__
、__setitem__
、__delitem__
__enter__
、__exit__
__add__
__iter__
:迭代器- 类中定义了__iter__ 和 _next_ 两个方法。
- _iter_ 返回一个可迭代对象(迭代器本身self也是可迭代的)
-\ next 方法,定义返回的下一个数据,如果没有数据了,则需要抛出一个StopIteration的异常。
- 生成器:是一个特殊的迭代器,它内部申明了_iter_ 和 _next_ 方法
- 可迭代对象:如果一个类中有__iter__方法且返回一个迭代器对象 ;则我们称以这个类创建的对象为可迭代对象。