"""
一、成员修饰符
共有成员
私有成员
__字段名 无法直接访问,只能间接访问
__方法名
class clsName:
def __init__(self,name,age):
self.name = name
self.__age = age
二、特殊成员
类名() 执行 __init__() 构造方法
__del__ 析构方法 对象被销毁的时候,自动执行
对象()或类名()() 执行 __call__()
int(对象) 执行 __int__()
str(对象) 执行 __str__()
__add__
__dict__ #将对象中封装的所有内容通过字典的形式返回
__getitem__ 对象[item]、对象[start:stop:step] #切片(slice类型)或者索引
__setitem__ 对象[key] = val
__delitem__ del 对象[key]
__iter__ 类中有__iter__方法,对象=》可迭代对象
对象.__iter__()的返回值:迭代器
for 循环,迭代器.next()
for 循环,可迭代对象.__iter__() 迭代器 next
三、metaclass,类型的祖宗
一切皆对象
类都是type类的对象 type(...)
类的对象 类名()
type类中的__init__方法
class Foo:
def func(self):
print(self)
obj = Foo()
==============================
def function(self):
print(self)
Foo = type('Foo',(object,),{'func':function})
obj = Foo()
==============================
Foo = type('Foo',(object,),{'func':lambda x:123})
"""
class MyType(type):
def __init__(self,*args,**kwargs):
print(self,"MyType __init__")
def __call__(self,*args,**kwargs):
print(self,"MyType __call__")
obj = self.__new__(self,*args,**kwargs)
self.__init__(obj,*args,**kwargs)
return obj
class Person(object,metaclass=MyType):
__country = "中国"
def __init__(self,name,age):
self.__name = name
self.__age = age
# 真正的对象是在__new__里面创建的
def __new__(cls,*args,**kwargs):
print(cls,"Person Object __new__")
return object.__new__(cls)
def __call__(self,*args,**kwargs):
print(self,"Person __call__")
def __reading(self):
print(self,"Person private __reading")
def read(self):
return self.__reading()
@property
def name(self):
return self.__name
@property
def age(self):
return self.__age
class Mother(Person):
"""
我是注释...
"""
def __init__(self,name,age):
super(Mother,self).__init__(name,age)
#真正的对象是在__new__里面创建的
def __new__(cls,*args,**kwargs):
print(cls,"Mother Object __new__")
return object.__new__(cls)
def __call__(self,*args,**kwargs):
print(self,"Mother __call__")
def __int__(self):
return 110
def __str__(self):
return "%s:%s"%(self.name,self.age)
def __getitem__(self,item):
print(self,item,type(item))
if type(item) == slice:
return (item.start,item.stop,item.step)
else:
return item + 10
def __setitem__(self,key,val):
print(self,key,val)
def __delitem__(self,key):
print(self,key)
def __iter__(self):
return iter([11,22,33,44,55])
def show(self):
print(self.name,self.age)
"""
程序从上至下执行加载进内存执行。
<class '__main__.Person'> MyType __init__
<class '__main__.Mother'> MyType __init__
Mother("Lily",18) Mother是MyType/type类的对象
对象(MyType/type类的)()--->__call__
<class '__main__.Mother'> MyType __call__
Mother的__new__()
<class '__main__.Mother'> Mother Object __new__
Mother的__init__()
one str(one)->__str__(self)
print(one)--->Lily:18
Mother("Faker",20) Mother是MyType/type类的对象
对象(MyType/type类的)()--->__call__
<class '__main__.Mother'> MyType __call__
Mother的__new__()
<class '__main__.Mother'> Mother Object __new__
Mother的__init__()
two str(two)->__str__(self)
print(two)--->Faker:20
"""
one = Mother("Lily",18)
two = Mother("Faker",20)
print(one)
print(two)
# reading 私有不能直接访问
# one.read()
# one.show()
# 对象() __call__ 方法
# one()
# int(one) -> __int__(self)
# print(int(one))
# one str(one)->__str__(self)
# print(one)
# print(Mother.__dict__)
# print(one.__dict__)
#
# print(one[10])
# print(one[1:5:2])
# one[10] = 30
# del one[10]
"""
__iter__ 类中有__iter__方法,对象=》可迭代对象
对象.__iter__()的返回值:迭代器
for 循环,迭代器.next()
for 循环,可迭代对象.__iter__() 迭代器 next
"""
# for item in one:
# print(item)
#
3.Python面向对象(三)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 上一篇文章为:→3.5.10作业 面向对象编程介绍 想一想 请用程序描述如下事情: A同学报道登记信息 B同学报道...
- 上一篇文章为:→3.10.3打飞机代码:显示、控制玩具飞机-面向过程 打飞机代码:显示、控制玩具飞机-面向对象 下...