内容简介:028class_part2
1、成员修饰符 2、特殊成员 3、metaclass,类的祖宗
###成员修饰符###
公有和私有
1 #__author:_nbloser
2 #date:2018/1/19
3
4 #私有类、对象成员变量,方法;在前面加两个下划线'__'
5 class Person:
6 __lover = '***' # 私有类字段,外部不能够直接访问
7
8 @staticmethod
9 def retu_lover():
10 return Person.__lover
11
12 def __init__(self,name,age):
13 self.name = name
14 self.__age = age # 私有对象字段,外部不能够直接访问
15
16 @property
17 def show_age(self):
18 return self.__age
19
20 obj = Person('x',21)
21 print(obj.name)
22 print(obj.show_age) # 通过 python 属性获取
View Code
****子类也不能直接访问父类的私有字段
### 特殊成员###
#__call__方法
class Person:
def __init__(self):
print('init')
def __call__(self,*args,**kwargs):
print('call')
obj = Person()
obj() # 这个对应的是执行__call__方法,一般也不用
#__add__方法
class Person:
def __add__(self,other):
return 123 # self=obj,other=obj2,可以让这个两个对象的字段相加,或者其他操作
obj = Person()
obj2 = Person()
x = obj + obj2 # 两个对象相加时,自动执行第一个对象的__add__方法,并且将第二个对象当作参数传递进入
print(x,type(x)) # 123<class'int'>
#__dict__(重点)
class Person:
def __init__(self, name,age):
self.name = name
self.age = age
obj = Person('x',21)
print(obj.__dict__) # {'name':'x','age':21}
# 通过字典把成员显示出来
## __getitem__、__setitem__、__delitem__方法、切片
只有__getitem__有返回值
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def __getitem__(self,item):
return item + 10
def __setitem__(self,key,value):
print(key,value)
def __delitem__(self,key):
print(key)
k = Person('x',21)
c = k[8] # 对应执行__getitem__方法
print(c)
k[8] = 235 # 8 235 # 对应执行__setitem__方法
del k[8] # 8 # 对应执行__delitem__方法
加上切片处理的,以__getitem__方法为例
def __getitem__(self,item):
# 如果item是基本类型:int,str,索引获取。如果是slice对象的话,切片
if type(item) == slice:
print(item.start)
print(item.stop)
print(item.step)
print('切片处理')
else:
print('索引处理')
c = k[8] # 索引处理
c = k[8:10:2] # 切片处理
##实现对象可以迭代
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def __iter__(self):
return iter([11,22,33])
l = Person('x',21)
for i in l:
print(i)
这里只是介绍。
###metaclass,类的祖宗###
def function(self):
print(213)
Foo = type('foo',(object,),{'func':function})
r = Foo()
r.func()
这样也是声明了一个类
这个我不知道为什么实现不了,所以我直接截图了。而且很懵,不知道用得多不多,暂时没有找别的博客,好像在 Java 里面好像没有看到使用太多这些。
先执行type的方法,才执行类的方法
obj真正是在__new__里面创建的
盗过来的创建对象流程图,作者:武沛齐
以上所述就是小编给大家介绍的《028class_part2》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
汇编语言(第2版)
王爽 / 清华大学出版社 / 2008-4 / 33.00元
《汇编语言(第2版)》是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的思想精心创作了《汇编语言(第2版)》。《汇编语言(第2版)》具有如下特点:采用了全新的结构对课程的内容进行组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索;在......一起来看看 《汇编语言(第2版)》 这本书的介绍吧!