属性,类方法,静态方法

1,特性propety,访问它时会执行一段功能,然后返回值

class Person:
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    @property  # 查找(主要是用于私有属性)
    def func(self):
        return self.__age

    @func.setter  # 增加和删除 (对于私有属性)当私有属性中存在是就是更改,没有就是增加,
    def func(self):
        return self.__age

    @func.deleter  # 删除(对于私有属性)
    def func(self):
        del self.__age


p1= Person("会员",29)  # 实例化对象p1
p1.age = 26  # 增加属性self.age= 26
p1.__age = 25  # 修改类中的静态属性self.__age = 25
print(p1.func)  # 查找属性self.__age的值为29
del p1.func  # 删除self.__age的属性
print(Person.__dict__)
print(p1.__dict__)

对属性(私有属性)在对象空间的增,删,改,查的一系列的操作,对类的空间的内容没有任何影响,只是引用到对象空间进行一番操作.

  • 为什么要用property?

将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉到自己的name实质性了一个函数然后计算出来,这种特性的使用方式统一访问的原则

由于新式类具有三种访类问方式,我们可以根据他们几个属性的访问特点,分别将三个定义方法对同一个属性:获取,修改,删除

2,类方法,静态方法

  • 2.1>类方法:
class A:
    def func(self):  # 普通方法
        print(self)

    @classmethod  # 类方法
    def func1(cls):
        print(cls)
a1= A()
print(a1)
a1.func()
print(a1)
a1.func1()
print(a1)

类方法:通过类名调用的方法,类方法中第一个参数约定俗称cls,python自动将类名(类空间)传给cls,对象调用类方法,cls的到是本身

class A:
    name = "老郑"
    count = 1

    @classmethod
    def func(cls):
        return cls.name + str(cls.count + 1)
print(A.func())
a1 = A()
print(a1.func())

  • 2.2>静态方法:对静态变量进行改变,要用类方法,在继承中,父类得到子类的空间.
class A:
    age = 12

    @classmethod  # 这个方法不用对象参与
    def func(cls):
        cls.age = 30  #对B类的静态字段可以修改
        return cls.age
class B(A):
    @staticmethod
    def login(username, password):
        if username == "alex" and password == 123:
            print("登陆成功")
        else:
            print("登陆失败")
A.login("alex",1234)
def login(username,password):
    if username == "alex" and password == 123:
        print("登陆成功")
    else:
        print("登陆失败")

把相似的功能的函数封装在类中,1>提高了代码的逻辑性,条理性,2>调高了代码的复用性和维护性,3>增强了代码之间的联系

 
posted @ 2018-07-28 09:50  帅爆太阳的男人  阅读(107)  评论(0编辑  收藏  举报