|
13. author作者信息
- __author__ = "Jack"
- def show():
- print(__author__)
- show()
14. slots
Python作为一种动态说话,可以在类界说完成和实例化后,给类可能工具继承添加随意个数可能恣意范例的变量或要领,这是动态说话的特征。譬喻:
- def print_doc(self):
- print("haha")
-
- class Foo:
- pass
-
- obj1 = Foo()
- obj2 = Foo()
- # 动态添加实例变量
- obj1.name = "jack"
- obj2.age = 18
- # 动态的给类添加实例要领
- Foo.show = print_doc
- obj1.show()
- obj2.show()
可是!假如我想限定实例可以添加的变量怎么办?可以使slots限定实例的变量,好比,只应承Foo的实例添加name和age属性。
- def print_doc(self):
- print("haha")
- class Foo:
- __slots__ = ("name", "age")
- pass
- obj1 = Foo()
- obj2 = Foo()
- # 动态添加实例变量
- obj1.name = "jack"
- obj2.age = 18
- obj1.sex = "male" # 这一句会弹堕落误
- # 可是无法限定给类添加要领
- Foo.show = print_doc
- obj1.show()
- obj2.show()
- 因为'sex'不在__slots__的列表中,以是不能绑定sex属性,试图绑定sex将获得AttributeError的错误。
- Traceback (most recent call last):
- File "F:/Python/pycharm/201705/1.py", line 14, in <module>
- obj1.sex = "male"
- AttributeError: 'Foo' object has no attribute 'sex'
必要提示的是,slots界说的属性仅对当前类的实例起浸染,对担任了它的子类是不起浸染的。想想也是这个原理,假如你担任一个父类,却莫名其妙发明有些变量无法界说,那不是大题目么?假如非要子类也被限定,除非在子类中也界说slots,这样,子类实例应承界说的属性就是自身的slots加上父类的slots。
成员掩护与会识趣制
有些工具你不想外部会见,纵然是通过挪用类工具也无法会见,那就请当真学完本章节。
私有成员
- class obj:
- def __init__(self,name):
- self.name=name
- def pri(self):
- print self.name
- __age = 18
- # 加上双下划线的就是私有变量,只能在类的内部会见,外部无法会见
- a = obj('zhao')
- a.pri()
运行功效:
- zhao
假如要在类中挪用这个私有成员,可以这么用
- class obj:
- def __init__(self,name):
- self.name=name
- def prin(self):
- print self.name
- __age = 18
- # 加上双下划线的就是私有变量,只能在类的内部会见,外部无法会见
- @classmethod
- # 假如要在类中挪用,起首挪用类要领
- def pri(cls):
- print cls.__age
- # 然后在行使
- a = obj('zhao')
- a.prin()
- obj.pri()
- # 通过这样直接挪用类中的私有变量
运行功效:
- zhao
- 18
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|