类中函数的三种装饰器

一,,property,

property装饰器是用来将类内的函数属性伪装成数据属性

class People:

    def __init__(self,name,weight,height):

        self.name = name

        self.weight = weight

        self.height = height

    @property

    def bmi(self):
        return self.weight/(self.height**2)

obj = People('egon',80,180)

print(obj.bmi)

# 解释:bmi在类内定义的是函数,在用的时候已经被property装饰过的可以当作属性来用,用之前可以设置几个条件,不用加括号

class People:
    def __init__(self,name):
        self.__name=name

    @property
    def name(self):
        return '<名字:%s>' %self.__name

    @name.setter
    def name(self,obj):
        if type(obj) is not str:
            print('name必须为str类型')
            return
        self.__name=obj

    @name.deleter
    def name(self):
        # print('不让删')
        del self.__name

obj=People('egon')

# 解释:bmi在类内定义的是函数,如果想在类外面对隐藏的变量进行更改时,如下:

@name.setting

def name(self,obj):
     if  type(obj) is not str:

         print('name必须为str类型')

         return

    self.__name = obj

# 删除的时候

@name.deleter

def name(self):

    del self.__name

二,

(一)绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入

# @classmethod    :被它装饰的函数绑定给类

1,绑定给对象的方法:类中定义的函数默认就是绑定给对象的

2,绑定给类的方法:为类中定义的函数加上一个装饰器classmethod

(二)非绑定方法:既不与类绑定,又不与对象绑定,意味着对象和类都可以来调用,无论谁来调用都是一个普通的函数,没有自动传值的效果

@staticmethod:被它装饰的函数不用被传值

应用:

class MySql:
    def __init__(self, ip, port):
        self.id = self.create_id()
        self.ip = ip
        self.port = port

    def tell_info(self):
        print('<id:%s ip:%s port:%s>' % (self.id, self.ip, self.port))

    @classmethod
    def from_conf(cls):
        return cls(ip, port)

    @staticmethod
    def create_id():
        import uuid
        return uuid.uuid4()

# obj1=MySql('1.1.1.1',3306)
# obj1.tell_info()
obj2 = MySql.from_conf()
obj2.tell_info()

猜你喜欢

转载自blog.csdn.net/qq_42737056/article/details/81941582