python之属性、类方法和静态方法
1、属性
将类方法伪装成一个属性,代码没有什么提升,只是更合理性
具体有以下集中类型: @property
@属性名.setter
@属性名.deleter
课堂习题
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.69, 69.5)
# print(p1.bmi()) #上面不加@property时,执行方法
print(p1.bmi) 加了之后的执行方法
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("你输入的年龄类型有误,请重新输入")
@age.deleter
def age(self):
del self.__age
p1 = Person("帅锅", 20) #此时调用的是@property下的age()方法
print(p1.age)
p1.age = 25 # 这个时候调用的是@age.setter下的age()方法
print(p1.age)
del p1.age # 这个时候调用的是@age.deleter下的age()方法
2、类方法:@classmathod
只能是类名调用(对象调用时,传给cls参数的也是该对象的所属类)
适用场景:
1)当方法无需对象参与时
class A1:
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())
2)对类中的静态变量进行修改
3)在父类中类方法得到子类的类空间时,可以做任何(包括增删改查)的动作
class A:
age = 12
@classmethod
def func1(cls): # 此方法无需对象参与
# print(cls)
# 对B类的所有的内容可以进行修改.
print(cls.age)
# return cls.name + str(cls.count + 1)
class B(A):
age = 22
B.func1()
不通过类方法,想让我的父类的某个方法得到子类的类空间里面的任意值.
class A:
age = 12
def func2(self):
print(self) # self 子类的对象,能得到子类 空间的任意值
class B(A):
age = 22
b1 = B()
b1.func2()
3、静态方法
优点:1,代码块.清晰.
2,复用性.
class 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('登录失败...')
login('alex',1234)
还没有评论,来说两句吧...