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

设定特性方法的值

 

 

 

 

 

 

 
 

 

 

 

 















转载于:https://www.cnblogs.com/beyondtring/p/9105953.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值