Python 类的特殊成员解析
类的成员有两种形式
公有成员,在任何地方都能访问
私有成员,只有在类的内部才能方法,私有成员命名时,前两个字符是下划线。
classFoo: def__init__(self,name,age): self.name=name self.__age=age defshow(self):#间接方法私有字段 returnself.__age obj=Foo('klvchen',25) print(obj.name) res=obj.show() print(res)
运行结果:
klvchen
25
公有静态字段:类可以访问;类内部可以访问;派生类中可以访问
私有静态字段:仅类内部可以访问;
classFoo: __v='666'#私有静态字段 def__init__(self): pass defshow(self): returnFoo.__v obj=Foo() res=obj.show() print(res)
运行结果:
666
classFoo: __v='666' def__init__(self): pass defshow(self): returnFoo.__v @staticmethod defstat(): returnFoo.__v res=Foo.stat() print(res)
运行结果:
666
无法从父类继承私有字段
classF: def__init__(self): self.ge=123 self.__gene=456#私有字段 classS(F): def__init__(self,name): self.name=name self.__age=18 super(S,self).__init__() defshow(self): print(self.name) print(self.__age) print(self.ge) print(self.__gene) s=S('klvchen') s.show()
运行结果:
klvchen
18
123
AttributeError:'S'objecthasnoattribute'_S__gene'
类的特殊成员
int(对象),会自动执行对象中的__int__方法,并将返回赋值给int对象,同理str(对象),会自动执行__str__方法,并返回赋值给str对象。
classFoo: def__init__(self): pass def__int__(self): return666 def__str__(self): return'helloworld' obj=Foo() print(obj,type(obj)) res=int(obj) print(res) res1=str(obj) print(res1)
运行结果:
<__main__.Fooobjectat0x0000022BBE9DA978>
666
helloworld
print(对象),str(对象),都会自动执行对象中的__str__方法,并返回
classFoo: def__init__(self,n,a): self.name=n self.age=a def__str__(self): return'%s-%d'%(self.name,self.age) obj=Foo('klvchen',28) print(obj)
运行结果:
klvchen-28
两个对象相加时,自动执行第一对象的__add__方法,并且将第二个对象当参数传递进去
classFoo: def__init__(self,name,age): self.name=name self.age=age def__add__(self,other): returnself.age+other.age obj1=Foo('klv1',23) obj2=Foo('klv2',24) res=obj1+obj2 print(res,type(res))
运行结果:
47
classFoo:
def__init__(self,name,age):
self.name=name
self.age=age
def__add__(self,other):
returnFoo(obj1.name,obj2.age)
def__del__(self):
print('析构方法')
obj1=Foo('klv1',23)
obj2=Foo('klv2',24)
res=obj1+obj2
print(res,type(res))
运行结果:
<__main__.Fooobjectat0x0000016DFCE125C0>
析构方法
析构方法
析构方法
li[对象]会自动执行li对象的类中的__getitem__方法,8当作参数传递给item
classFoo: def__init__(self,name,age): self.name=name self.age=age def__getitem__(self,item): returnitem li=Foo('klvchen',28) r=li[8] print(r)
运行结果:
8
类中的__setitem__,__delitem__方法
classFoo: def__init__(self,name,age): self.name=name self.age=age def__getitem__(self,item): returnitem def__setitem__(self,key,value): print(key,value) def__delitem__(self,key): print(key) li=Foo('klvchen',28) r=li[8] print(r) li[100]='hello' delli[999]
运行结果:
8
100hello
999
执行类中的__iter__()方法,并获取其返回值,循环上一步中返回对象,用于迭代器,之所以列表、字典、元组可以进行for循环,是因为类型内部定义了iter
classFoo: def__init__(self,name,age): self.name=name self.age=age def__iter__(self): returniter([11,22,33]) li=Foo('klvchen',26) foriinli: print(i)
运行结果:
11
22
33
for循环的内部操作
obj=iter([11,22,33]) whileTrue: val=obj.next() printval
总结
以上所述是小编给大家介绍的Python类的特殊成员解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!