娄底网站建设工作室,怎样做网站性能优化,做民宿怎么登录网站,个人网站当企业网站用成员修饰符 两种成员 - 公有成员 - 私有成员, __字段名 - 无法直接访问#xff0c;只能通过内部方法来间接访问私有成员 简例#xff1a;公有成员与私有成员 class Info:country 中国 # 静态字段 __gender 男 # 静态字段私有化def __init__(self,name,age):self.nam… 成员修饰符 两种成员 - 公有成员 - 私有成员, __字段名 - 无法直接访问只能通过内部方法来间接访问私有成员 简例公有成员与私有成员 class Info:country 中国 # 静态字段 __gender 男 # 静态字段私有化def __init__(self,name,age):self.name nameself.__age age # age字段为私有的外部无法直接访问def show(self):return self.__age,Info.__genderdef __get(self):print(私有方法)def gain(self):r self.__get()return robj Info(alex,19)
print(obj.name)
# print(obj.__age) # 此时会报错无法访问
res obj.show() # 方法在类中故能通过方法在内部访问私有字段
print(res)
# obj.__get() # 此时也会报错无法访问
obj.gain() # 通过内部方法来访问alex
(19, 男)
私有方法特殊成员 - __init__ 类自动执行 - __call__ 对象 类 自动执行 - __int__ int() 执行 - __str__ str() 执行 - __dict__ 对象.__dict__ 执行将对象中封装的所有内容以字典的形式返回 简例__call__方法 class Info:def __init__(self):print(init)def __call__(self, *args, **kwargs): # 对象() 自动执行print(call)obj Info()
obj() # 只执行__call__方法
Info()() # 相当于 obj()()init
call
init
call简例__int__方法 __str__方法 __dict__方法 __getitem__方法 class Info:def __init__(self,name,age):self.name nameself.age age# int 对象自动执行__int__方法并将返回值赋值给int对象def __int__(self):return 0# str 对象自动执行__str__方法并将返回值赋值给str对象def __str__(self):return %s - %s %(self.name,self.age)def __getitem__(self, item):return itemobj Info(alex,20)
print(obj) # 实际上 print()执行print(str(obj))
d obj.__dict__
print(d)
res Info.__dict__ # 查看类中的内容
print(res)
li Info(mike,22)
res li[APPLE] # 自动执行 li 对象的类中的 __getitem__方法’APPLE‘作为参数传递给item
print(res)alex - 20
{name: alex, age: 20}
{__int__: , __getitem__: , __str__: , __dict__: attribute __dict__ of Info objects, __init__: , __doc__: None, __weakref__: attribute __weakref__ of Info objects, __module__: __main__}
APPLEmetaclass , 类的本源 type python中一切的事物都是对象在调用类的时候都会经过 type类python中默认 metaclass type 简例创建一个Mytype类来继承type类中的方法在Mytype类中可以自定义自己需要的方法而不必要一定执行type类中的方法 class Mytype(type):def __init__(self,*args,**kwargs):# self Info类super(type, self).__init__()def __call__(self,*args,**kwargs):# self Info类obj self.__new__(self,*args,**kwargs)# 此时 r 为 Info类中的 __new__方法中返回的对象self.__init__(obj)class Info(object,metaclassMytype):def __init__(self):print(hello world) # obj Info() 其实就是调用了类中的 __new__方法来创建obj对象def __new__(cls,*args,**kwargs):return object.__new__(cls,*args,**kwargs)# 此时创建了对象def func(self):print(hi world)obj Info()hello world值得注意的是obj 是对象属于Info类 Info类也是对象 只不过是type类中的对象type其实也是一个类 实际上类在执行阶段的执行顺序是 对象 类 -- type类中的__call__方法 -- 类中的__new__方法 -- 类中的 __init__方法 而并非之前所说的简单地调用了 __init__ 方法转载于:https://www.cnblogs.com/ArticleYeung/p/10500105.html