Python_65利用反射查看对象成员归属
在查找父类等继承的方法中,self表示最开始的变量(self.xxx)
执行父类的构造方法 super(当前类,self).init()
父类.__init__()
反射:以字符串的形式去对象中操作成员 既可以找对象的成员 又可以找类的成员
新建一个py文件 leideduotai.py
class Animal:
def __init__(self,name):
self.name=name
#print ('A的构造方法')
self.ty='动物'
def chi(self):
print ('chichi')
***************************************************************
#导入模块
m=__import__('leideduotai',fromlist=True)
#去模块中找类
class_name=getattr(m,'Animal')
#根据类创建对象
obj=class_name('shenma')
#去对象中找name对应的值
val=getattr(obj,'name')
print (val)
输出————————————————————————————————————————————————————————————————————————————————————
shenma
*******************************************************************************************************************************************************************************************************************************************************************************************************
普通字段在对象中;普通方法在对象中
静态字段存在类中
class Animal:
mao='有毛的动物'
def __init__(self,name):
self.name=name
#print ('A的构造方法')
self.ty='动物'
def chi(self):
print ('chichi')
mao就是静态字段
自己去访问自己的成员,除了类中的方法
Animal.mao 可以
Animal.chi 就不好,尽量不要
***********************************************************************************************************静态方法*****************************************************************************************************************************************************************************
class Animal:
mao='有毛的动物'
def __init__(self,name):
self.name=name
#print ('A的构造方法')
self.ty='动物'
def chi(self):
print ('chichi')
@staticmethod
def go():
print ('gogogogogogo')
这里的go 就是静态方法,没有self,不创建对象就可以直接通过类访问
****************************************************************************************************************************************************************************************************类方法******************************************************************************************
class Animal:
mao='有毛的动物'
def __init__(self,name):
self.name=name
#print ('A的构造方法')
self.ty='动物'
def chi(self):
print ('chichi')
@staticmethod
def go():
print ('gogogogogogo')
@classmethod
def gggg(cls):
print ('ggggggggggggggggg')
gggg方法是类方法,需要有一个cls参数,通过类进行访问,
**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
面向对象的成员:
静态字段
静态方法
普通字段
普通方法
类方法
class Animal:
mao='有毛的动物'
def __init__(self,name):
self.name=name
#print ('A的构造方法')
self.ty='动物'
def chi(self):
print ('chichi')
def start(self):
temp="%s sb" %self.name
print (temp)
@property #特性
def end(self):
temp="end %s sb" %self.name
print (temp)
@staticmethod
def go():
print ('gogogogogogo')
@classmethod
def gggg(cls):
print ('ggggggggggggggggg',cls)
ddd=Animal('狗')
ddd.start()
ddd.end
输出——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
狗 sb
end 狗 sb
这里作为特性方法end 在调用时没有加() 而start方法在调用时加了() 普通方法的调用 特性在调用时将方法伪造成了字段
******************************************************************************************************************************************************************************************************
class Animal:
end='endziduan'
mao='有毛的动物'
def __init__(self,name):
self.name=name
#print ('A的构造方法')
self.ty='动物'
def chi(self):
print ('chichi')
def start(self):
temp="%s sb" %self.name
print (temp)
@property #特性
def end(self):
temp="end %s sb" %self.name
print (temp)
@end.setter #这是个装饰器 是end 的装饰器 这个是方法可以被设定值的
def end(self,value):
print (value)
self.name=value
@staticmethod
def go():
print ('gogogogogogo')
@classmethod
def gggg(cls):
print ('ggggggggggggggggg',cls)
ddd=Animal('狗')
ddd.start()
ddd.end
ddd.end='12345'
ddd.end
输出——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
狗 sb
end 狗 sb
12345
end 12345 sb
设定特性方法的值