面向对象-属性-类方法,静态方法

一,属性:

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

property:是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值

property一般用于类似于bmi,area,周长等需要计算的名词上

class Person:
    def __init__(self,name,hight,weight):
        self.name = name
        self.__hight = hight  #私有化
        self.__weight = weight
    def bmi(self):
        return '%s 的bmi 值%s' % (self.name, self.__weight / self.__hight ** 2)
p1 = Person('张三',1.7,60)
print(p1.bmi())
#结果:张三 的bmi 值20.761245674740486

使用@property

class Person:
    def __init__(self,name,hight,weight):
        self.name = name
        self.__hight = hight  #私有化
        self.__weight = weight
    @property
    def bmi(self):
        return '%s 的bmi 值%s' % (self.name, self.__weight / self.__hight ** 2)
p1 = Person('张三',1.7,60)
print(p1.bmi)  #bmi方法伪装成属性
#结果:张三 的bmi 值20.761245674740486

属性的操作(增,改,删):

class Person:
    def __init__(self,name,age):
        self.name = name
        self.__age = age if type(age) is int else print('你输入的年龄的类型有误,请输入数字')
    @property
    def age(self):
        return self.__age
    @age.setter  #改/增
    def age(self,a1):
        self.__age = a1 if type(a1) is int else print('你输入的年龄的类型有误,请输入数字')
    @age.deleter  #
    def age(self):
        del self.__age

p1 = Person('张三',20)
print(p1.age)
p1.age = 23  #修改
print(p1.age)
del p1.age  #删除
print(p1.__dict__)
#结果:
20
23
{'name': '张三'}

二.类方法(classmethod),静态方法(staticmethod)

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

类方法的应用场景:

1.类中有些方法不需要对象参与

class A:
    name = 'alex'
    count = 1

    @classmethod
    def func1(cls):  # 此方法无需对象参与
        return cls.name + str(cls.count + 1)

A.func1(111)  #不可取
#a1 = A()
#print(a1.func1())
print(A.func1())  #用类名调用cls得到的是类本身,所以不需要传参

2.对象中的静态变量进行改变,需要类方法

class A:
    age = 12
    @classmethod
    def func(cls):
        cls.age = 22  #修改
        print(cls.age)
A.func()
print(A.__dict__)

3.继承中父类得到子类的空间 可以做任意操作

class A:
    age = 12
    @classmethod
    def func(cls):
        cls.age = 30 #将B类中的age改成30 也可删除增加任意操作
        print(cls.age) #self 子类的对象,能得到子类空间的任意值
class B(A):
    age = 22
B.func()
print(A.__dict__)
print(B.__dict__)

静态方法:

class A:
    @staticmethod
    def func(username,password):
        if username == 'alex' and password == 123:
            print('登录成功')
        else:
            print('登录失败')
A.func('alex',123)

作用:1.代码块,清晰

2.复用性

原文地址:https://www.cnblogs.com/ITdong-1/p/9378855.html