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

设定特性方法的值

 

 

 

 

 

 


 

 

 

 















posted on 2018-05-29 16:54  JuGooLar  阅读(381)  评论(0编辑  收藏  举报

导航