Python_day20(2018.7.27)_(属性,类方法,静态方法)

今日主要内容

01 属性

属性: 将方法伪装成一个属性,代码上没有什么提升,只是更合理.
@property ***
@属性名.setter **
@属性名.deleter *

02 类方法
@classmethod
只能有类名调用(对象调用,传给cls参数的也是该对象的所属类).
使用场景:
1,无需对象参与.
2,对类中的静态变量进行修改.
3,在父类中类方法得到子类的类空间,为所欲为.

03 静态方法
@staticmethod
# 1,代码块.清晰.
# 2,复用性.

01 属性

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

# --------------康琛练习-------------------
# 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.6, 52)
# print(p1.bmi)
# print(p1.__dict__)
#
# # # 属性 : 将一个方法 伪装成一个 属性,在代码的级别上没有本质的提升,但是让其看起来跟合理.
# print(p1.name)
# p1.name = 'alex'
# print(p1.name)


------------------属性的 改 和 删除---------------------

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("宝宝",18)
print(p1.age)
p1.age = 20 #利用 @age.setter 对实例化的对象进行静态变量进行修改 p1.age = 20
print(p1.age) #利用@property 函数是方法age伪装成是Person 的一个静态变量.
del p1.age
print(p1.__dict__)


-----------------------类方法,静态方法---------------
@classmethod
只能有类名调用(对象调用,传给cls参数的也是该对象的所属类).
使用场景:
1,无需对象参与.
2,对类中的静态变量进行修改.
3,在父类中类方法得到子类的类空间,为所欲为.

# --------------康琛练习------------------
# class A:
# def func(self):
# print(self)
# @classmethod
# def func1(cls):
# print(cls)
# a1 = A() #实例化一个A的对象
# a1.func() #让实例化出来的对象 a1 调用类中的类方法func1,会自动将类的空间传递给func1(cls)的参数cls
# A.func(a1) #让实例化出来的对象直接调用父类中的方法func1()

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

# a1 = A()
# a1.func1() # 对象调用类方法,cls 得到的是类本身.


#类对象方法
# ---------------康琛练习__类对象方法---------------
# class A1:
# name = "alex"
# count = 1
# @classmethod
# def func1(cls):
# return cls.name + str(cls.count + 1)
# print(A1.func1()) #无需实例化对象,就可以直接调用类中的类方法.



----------------------------静态方法------------------------
# 静态方法:
# 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)

静态方法的特征:

# 1,代码块.清晰.
# 2,复用性.
















猜你喜欢

转载自www.cnblogs.com/kcwxx/p/9379257.html