属性,类方法,静态方法

属性:将一个方法伪装成一个属性,在代码的级别上没有本质的提升,但是让其看起来更合理

class Person:
    def __init__(self,name,age):
        self.name=name
        if type(age) is int:
            self.__age=age
        else:
            print('输入类型有误')
    @property           #把方法伪装成属性
    def age(self):
        return self.__age
    @age.setter
    def age(self,a1):
        if type(a1) is int:
            self.__age=a1       #改变值是在这一步发生的
        else:
            print('输入类型有误')
p1=Person('张三',18)
print(p1.age)       #伪装成了属性,所以执行不用加括号
p1.age=37
#伪装之后在这传入要改变年龄的值,传给@age.setter下面函数里的a1
print(p1.age)       #此时的age已经被修改了,再执行 @property下面的函数,打印age
# 类方法
# 类方法:通过类名调用的方法,类方法中第一个参数约定俗成是 cls , Python自动将类名空间传给cls
class A:
    name='小草'
    @classmethod
    def fu(cls):
        return ('%s在吃草' % cls.name)
print(A.fu())
类中有些方法不需要对象参与
class A:
    name='小花'
    age=18
    @classmethod
    def fu(cls):        #此时方法无需对象参与,也可以用对象执行方法,但是在类方法中不要这样用
        return cls.age+1
print(A.fu())

静态方法

1,对类中的静态变量进行改变,要用类方法
2,继承中,父类得到子类的类空间
不通过类方法,让我的父类的某个方法得到子类的类空间里面的任意值
class A:
    age=12
    def func(self):     #父类里面有func这个方法,执行这个函数方法,此时a1传给self
        print(self.age)     #此时就相当于a1.age,这个age是B类里的age,因为实例化的是B类
class B(A):
    age=22
a1=B()      #B类实例化一个对象
a1.func()
a1就是对象,此时要执行func这个函数方法,先从对象空间里面去找,对象空间里没有func这个方法,然后再去父类里面找
class A:
    @staticmethod
    def login(username,password):
        if username == 'fu' and password == 123:
            print('登录成功')
        else:
            print('登录失败')
A.login('fu',123)
# # 静态方法
# # 1,代码块.清晰.
# # 2,复用性.

猜你喜欢

转载自www.cnblogs.com/hdy19951010/p/9379301.html