python之路——第三块(面向对象进阶)

静态方法

@staticmethod   ------>  截断跟类的关联,变成一个函数方法

但是需要类实例化后才能调用这个方法,可以用于导入其他模块的功能,构成工具包

class blackperson(person):
    def __init__(self,name,job,love,speed,animals_obj):
        super(blackperson, self).__init__(name,job,love)
        self.animals = animals_obj
        # person.__init__(self,name,job,love)
        self.speed = speed
    def run(self):
        print(self.name,"run %s"%self.speed)
    @staticmethod      #静态方法
    def work(name):
        print("%s is working now"%name)

d2 = blackperson("dzk","st","zm","200",1)
d2.work("alex")

类方法

@classmethod

只能访问类变量,不能访问实例变量

class blackperson(person):
    def __init__(self,name,job,love,speed,animals_obj):
        super(blackperson, self).__init__(name,job,love)
        self.animals = animals_obj
        # person.__init__(self,name,job,love)
        self.speed = speed
    @classmethod
    def run(self):
        print(self.name,"run %s"%self.speed)
    @staticmethod      #静态方法
    def work(name):
        print("%s is working now"%name)
d2 = blackperson("dzk","st","zm","200",1)
d2.run()

  加上类方法后,调用会报错,但定义了两个类变量,就能正常执行。类方法不能调用构造函数的属性,只能调用公有属性。

    name = "alex"
    speed = 1

属性方法

@property

把一个方法变成静态属性,不能直接传参数,可以用@xxx.setter重新写一个方法用来对变成静态属性后赋值操作。而且不能del删除,只能用@xxx.delter来删除 

class person(object):
    def __init__(self,name,job,love):   #构造函数,构造方式,初始化方法
        self.name = name
        self.job = job
        self.love = love
    @property
    def say(self):
        print("您好,",self.name)
    def game(self):
        print(self.name,"is playing game")
    def marry(self):
        print("%s married with %s"%(self.name,self.love))
d1 = person("dzk","st","lyf")
d1.say

  调用的时候如果加括号会报错,因为是已经变成了静态属性,所以不用加括号,直接调用。

_doc_  打印类的描述信息,即类的注释信息

_module_  输出对象调用的模块

_dic_  以字典形式打印类下的信息

_del_  析构方法,当对象在内存中被释放时,自动触发执行。

反射 ------>hasattr(),getattr(),setattr(),delattr() 四个方法

hasattr(d,choice)  , d是实例后的对象,choice是方法的代词,用于查询类中是否有choice这个方法

class person(object):
    def __init__(self,name,job,love):   #构造函数,构造方式,初始化方法
        self.name = name
        self.job = job
        self.love = love
    def say(self):
        a = 1
        print("您好,",self.name)
        print(a)
    def game(self):
        print(self.name,"is playing game")
    def marry(self):
        print("%s married with %s"%(self.name,self.love))

p1 = person("dzk","st","lyf")
choice = input(">>>>>")
hasattr(p1,choice)
print(hasattr(p1,choice))

  如果输入的是say,返回True

getattr(d,choice) 如果方法存在,调用choice这个方法

class person(object):
    def __init__(self,name,job,love):   #构造函数,构造方式,初始化方法
        self.name = name
        self.job = job
        self.love = love
    def say(self):
        a = 1
        print("您好,",self.name)
        print(a)
    def game(self):
        print(self.name,"is playing game")
    def marry(self):
        print("%s married with %s"%(self.name,self.love))

p1 = person("dzk","st","lyf")
choice = input(">>>>>")
hasattr(p1,choice)
print(hasattr(p1,choice))
getattr(p1,choice)()

  调用的时候,直接在gerattr()后再加一个括号即可,如果方法不存在,报错

setattr(x,y,z)  x:对象,y:字符串 , z:方法  动态的将z方法装配进类中,可添加静态属性

setattr(p1,"age","22")
setattr(p1,"math",lambda num: num + 1)

# print(getattr(p1,choice))
print(getattr(p1,choice)(2))

  第一个是设置一个静态属性,age = 22

  第二个是设置一个新的方法,并用getattr()调用

原文地址:https://www.cnblogs.com/japhi/p/6923220.html