python之属性、类方法和静态方法

今天药忘吃喽~ 2024-04-17 05:46 223阅读 0赞

1、属性

将类方法伪装成一个属性,代码没有什么提升,只是更合理性

具体有以下集中类型: @property

  1. @属性名.setter
  2. @属性名.deleter

课堂习题

  1. class Person:
  2. def __init__(self, name, hight, weight):
  3. self.name = name
  4. self.__hight = hight
  5. self.__weight = weight
  6. @property
  7. def bmi(self):
  8. return "%s 的bmi值为%s" % (self.name, self.__weight / self.__hight ** 2)
  9. p1 = Person("小明", 1.69, 69.5)
  10. # print(p1.bmi()) #上面不加@property时,执行方法
  11. print(p1.bmi) 加了之后的执行方法
  12. class Person:
  13. def __init__(self, name, age):
  14. self.name = name
  15. if type(age) is int:
  16. self.__age = age
  17. else:
  18. print("你输入的年龄类型有误,请重新输入")
  19. @property
  20. def age(self):
  21. return self.__age
  22. @age.setter
  23. def age(self, a1):
  24. if type(a1) is int:
  25. self.__age = a1
  26. else:
  27. print("你输入的年龄类型有误,请重新输入")
  28. @age.deleter
  29. def age(self):
  30. del self.__age
  31. p1 = Person("帅锅", 20) #此时调用的是@property下的age()方法
  32. print(p1.age)
  33. p1.age = 25 # 这个时候调用的是@age.setter下的age()方法
  34. print(p1.age)
  35. del p1.age # 这个时候调用的是@age.deleter下的age()方法

2、类方法:@classmathod

只能是类名调用(对象调用时,传给cls参数的也是该对象的所属类)

适用场景:

  1. 1)当方法无需对象参与时
  2. class A1:
  3. name = 'alex'
  4. count = 1
  5. @classmethod
  6. def func1(cls): # 此方法无需对象参与
  7. return cls.name + str(cls.count + 1)
  8. A.func1(111) # 不可取
  9. a1 = A()
  10. print(a1.func1())
  11. print(A.func1())
  12. 2)对类中的静态变量进行修改
  13. 3)在父类中类方法得到子类的类空间时,可以做任何(包括增删改查)的动作
  14. class A:
  15. age = 12
  16. @classmethod
  17. def func1(cls): # 此方法无需对象参与
  18. # print(cls)
  19. # 对B类的所有的内容可以进行修改.
  20. print(cls.age)
  21. # return cls.name + str(cls.count + 1)
  22. class B(A):
  23. age = 22
  24. B.func1()
  25. 不通过类方法,想让我的父类的某个方法得到子类的类空间里面的任意值.
  26. class A:
  27. age = 12
  28. def func2(self):
  29. print(self) # self 子类的对象,能得到子类 空间的任意值
  30. class B(A):
  31. age = 22
  32. b1 = B()
  33. b1.func2()

3、静态方法

优点:1,代码块.清晰.
2,复用性.

  1. class A:
  2. @staticmethod
  3. def login(username, password):
  4. if username == 'alex' and password == 123:
  5. print('登录成功')
  6. else:
  7. print('登录失败...')
  8. A.login('alex',1234)
  9. 以下是函数本身就可以实现的,这就是静态方法相对于函数的优点
  10. def login(username,password):
  11. if username == 'alex' and password == 123:
  12. print('登录成功')
  13. else:
  14. print('登录失败...')
  15. login('alex',1234)

发表评论

表情:
评论列表 (有 0 条评论,223人围观)

还没有评论,来说两句吧...

相关阅读