18.07.27(属性,类方法,静态方法)

1.属性

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

 用在类似名词却需要计算的地方例如:BMI,面积,周长等

例:

class Heather:
def __init__(self,name,weight,height):
self.name = name
self.__weight = weight
self.__height = height
@property
def bmi(self):
BMI = round(self.__weight/self.__height**2,2)
print("%s的体脂数是%s" % (self.name,BMI))
p1 = Heather("小白",55,1.75)
p1.bmi ==>小白的体脂数是17.96

属性的改值:

例:

class Person:
def __init__(self,name,age):
self.name = name
self.__age = age
@property
def age(self): 方法名字要相同
return self.__age
@age.setter
def age(self,a1): 把要修改的值传给a1
print(a1)
p1 = Person("小白",24)
p1.age = 26
p1.age ==>26

例:判断年龄是不是整数 和 删除属性

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("小白",19)
p1.age = 20
print(p1.age) ==>20
del p1.age
print(p1.__dict__) ==>{'name': '小白'}

三级运算:True:part if 条件判断 else False:part

2.类方法

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

例:

class A:
def func(self):
print(self)
@classmethod
def func1(cls):
print(cls)
a1 = A()
print(a1.func)
print(A.func1)
a1 = A()
a1.func1() 对象调用类方法,传给cls参数也是该对象的所属类,cls得到的是类本身
结果:
<bound method A.func of <__main__.A object at 0x000001D7362BFF28>>
<bound method A.func1 of <class '__main__.A'>>
<class '__main__.A'>

类方法的应用:

(1).类中有些方法是不需要传入对象,不要对象的一切东西(不需要对象的参与)

例:

class Person:
name = "小白"
count = 1
@classmethod
def func(cls):
return cls.name+str(cls.count+1)
print(Person.func()) ==>小白2

(2).对类中的静态变量进行改变要用类方法

(3).在继承中父类得到子类的类空间

例:

class A:
age = 19
@classmethod #类方法---对子(B)类中的所有内容都可以进行访问和修改
def func(cls):
print(cls)
def func1(self): #方法--只能访问子(B)类中的所有内容
print(self)
class B(A):
age = 22
B.func()        ==><class '__main__.B'>

3.静态方法

例:

class A:
@staticmethod
def func():
print("123")
A.func() ==>123

静态方法的优点:

(1).代码块清晰

(2)复用性,减少代码量

猜你喜欢

转载自www.cnblogs.com/gxj742/p/9378313.html
今日推荐