python学习第二十二章

今日内容:

1.属性

2. 类方法

3.静态方法

4.反射

1. 属性

是指调用类中的函数,就像调用对象属性值一样调用.更权威解释:将方法 伪装 成属性,虽然在代码层面上没有任何高深之处,但是让其看起来更合理.

示例:

class A:
    def __init__(self,*args):
        self.name = args[0]
        self.height = args[1]
        self.weight = args[2]
    @property
    def bmi(self):
        return self.height /self.weight**2

a1 = A("leon",1.72,60)
print(a1.bmi)

注意,这里是通过加@property  这个装饰器来实现的,

即然是属性,那么也可以修改的,关于修改和删除,是通过下面方法实现的,

示例:

class B:
    def __init__(self,*args):
        self.name = args[0]
        self.__pwd = args[1]
    @property
    def pwd(self):
        return  self.__pwd
    @pwd.setter   #注意这里的装饰器名字和上面的函数名一致,以及下面的函数都是一致的,下面赋值会传入这个new_pwd里面
    def pwd(self,new_pwd):   
        self.__pwd = new_pwd
obj1 = B("leon","hao123")
obj1.pwd = 123456
print(obj1.pwd)

属性的删除操作示例:

class B:
    def __init__(self,*args):
        self.name = args[0]
        self.__pwd = args[1]
    @property
    def pwd(self):
        return  self.__pwd
    @pwd.setter   #注意这里的装饰器名字和上面的函数名一致,以及下面的函数都是一致的,下面赋值会传入这个new_pwd里面
    def pwd(self,new_pwd):
        self.__pwd = new_pwd
    @pwd.deleter
    def pwd(self):
        del self.__pwd
obj1 = B("leon","hao123")
obj1.pwd = 123456
print(obj1.pwd)
del obj1.pwd
print(obj1.pwd)

具体操作流程如下:

# 第一步,对属性进行改操作,自动执行 被这个@pwd.setter装饰器装饰的方法
# 第二步,将新值传给这个被@pwd.setter装饰器装饰的方法里面,当做参数.

2. 类方法,静态方法

类方法:类名去调用类方法,自动将类的空间传给类方法中的cls..对象如果调用类方法,自动将类空间传给类中的cls

示例:

class C:
    num = 1
    def __init__(self,*args):
        self.name = args[0]
        self.age  = args[1]
    @classmethod
    def class_fun(cls):
        print(cls.num)
c1 = C("leon",18)
c1.class_fun()

 什么情况下使用类方法?
 直接让类去操作类中的方法,没有必要创建对象在操作的时候,用类方法.

3. 静态方法

静态方法:在类中定义一个静态方法,无需传入你的类空间,对象空间,可以当成普通函数去用.(也就是不用再传入self的,也就是类中的独立函数)

示例:

class D:
    def __init__(self):
        pass
    @staticmethod
    def fun(a,b):
        return a + b
d1 = D()
print(d1.fun(2,3))

 4.反射(非常非常重要,)

反射:通过 字符串 操作一个空间 (对象).

总共有四个方法:

1.getattr()

2.hasattr()

3.setattr()

4.delattr()

四种场景的不同使用方法:

1,实例化一个对象去研究

   

猜你喜欢

转载自www.cnblogs.com/ahliucong/p/9259686.html