码迷,mamicode.com
首页 > 编程语言 > 详细

Python之面向对象进阶------反射(Day26)

时间:2017-08-16 21:59:21      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:字符   dem   asa   eth   进阶   aaa   调用   obj   字符串   

 

classmethod

class Classmethod_Demo():
    role = dog

    @classmethod
    def func(cls):
        print(cls.role)


Classmethod_Demo.func()

staticmethod

class Staticmethod_Demo():
    role = dog

    @staticmethod
    def func():
        print("当普通方法用")

Staticmethod_Demo.func()

classmethod 和staticmethod的区别

classmethod:我们把它叫做类方法

staticmethod:我们把它叫做静态方法

在python中,静态方法和类方法都是可以通过类对象和类对象实例访问,但是区别是:

1.@classmethod:是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的叫作实例方法,类方法的参数是cls,而实例方法的参数是self,它表示该类的一个实例

2.普通对象方法至少需要一个self参数,表示类对象实例

3.类方法有类变量cls传入从而可以用cls做一些相关的处理,并且有子类继承是,调用该类方法时,传入的类变量cls是子类而非父类 对于类方法,可以通过类来调用,就像C.f(),有点类似C++中的静态方法, 也可以通过类的一个实例来调用,就像C().f(),这里C(),写成这样之后它就是类的一个实例了。 

4.静态方法则没有,它基本上跟一个全局函数相同,一般来说用的很少

 

 

二.isinstance 和 issubclass

isinstance(obj,cls)检查object是否是类class的对象

class Foo(object):
     pass
  
obj = Foo()
  
sinstance(obj, Foo)

issubclass(sub,super)检查sub的类是否是super类的派生类

class Foo(object):
    pass
 
class Bar(Foo):
    pass
 
issubclass(Bar, Foo)

三.反射

在Python中一切事物皆对象 ,都可以使用反射。面向对象的反射:通过字符串的形式操作对象相关的属性

两个很重要的方法:hasattr 和 getattr(必须掌握)                 setattr    delattr(了解)

 

class Foo:
    f = 类的静态变量
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def say_hi(self):
        print(hi,%s%self.name)

obj=Foo(egon,73)

#检测是否含有某属性
print(hasattr(obj,name))
print(hasattr(obj,say_hi))

#获取属性
n=getattr(obj,name)
print(n)
func=getattr(obj,say_hi)
func()

print(getattr(obj,aaaaaaaa,不存在啊)) #报错

#设置属性
setattr(obj,sb,True)
setattr(obj,show_name,lambda self:self.name+sb)
print(obj.__dict__)
print(obj.show_name(obj))

#删除属性
delattr(obj,age)
delattr(obj,show_name)
delattr(obj,show_name111)#不存在,则报错

print(obj.__dict__)

四个方法的使用演示

 

Python之面向对象进阶------反射(Day26)

标签:字符   dem   asa   eth   进阶   aaa   调用   obj   字符串   

原文地址:http://www.cnblogs.com/shaojiafeng/p/7375768.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!