# 一,属性的初始
为什么要用property
将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则
由于新式类中具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除
1.定义时,在普通方法的基础上添加 @property 装饰器;
2.定义时,属性仅有一个self参数
3.调用时,无需括号
# class Person:
# language='语言'
# def __init__(self,name,age,hight,weight):
# self.name=name
# self.__age=age
# self.__hight=hight
# self.weight=weight
# @property # 引入这个装饰器 是为了使bmi方法伪装成一个属性
# def bmi(self):
# return self.weight/self.__hight**2
# @property # 引入这个装饰器 是为了使age方法伪装成一个属性 一个方法就需要一个装饰器
# def age(self):
# return self.__age
# # @age.setter # 引入这个装饰器是为了对属性的修改,但前提必须引入@property , 这个会自动执行下面的age方法,setter前面的方法名必须跟着@property下面的方法名
# # def age(self,a1): # 这个a1是为了接收更改时传入的数据
# # self.__age=a1
# @property
# def hight(self):
# return self.__hight
# @hight.deleter
# def hight(self):
# del self.__hight
# p1=Person('胡汉三',18,1.83,70)
# print(p1.bmi) # 将执行方法伪装成查看实例化对象的属性
# print(p1.age)
# p1.age=2 #伪装成对对象属性的修改
# del p1.hight #伪装成对对象属性的删除
# print(p1.__dict__)
# property : 类似于bmi这种,area,周长.... *** 将对象伪装成属性 为了看着更合理,代码本质没什么变化
# @age.setter **
# @age.deleter *
# 二,类方法
# class A:
# name='姓名'
#
# def func(self): #普通方法
# print(self)
# @classmethod
# def func1(cls,a1): # 默认第一个参数是cls
# cls.name=a1
#
# @classmethod
# def func2(cls):
# return cls.name
# a1=A()
# # print(a1.func1)
# # print(A.func1)
# A.func2() # 类名调用类方法不需要传入参数
# print(A.__dict__)
# A.func1('名字') #可以用来修改类中的静态变量
# class A:
# name='姓名'
#
# def func(self): #普通方法
# print(self)
# @classmethod
# def func1(cls): # 默认第一个参数是cls
# print(cls)
# class B(A):
# age=22
# B.func1() #可以让父类得到子类的类空间,可以在父类中对子类进行增删改查,为所欲为
# class A:
# name='姓名'
#
# def func(self): #普通方法
# print(self)
# class B(A):
# age=22
# b1=B()
# b1.func() #可以不通过类方法,等到子类的实例化对象,然后通过对象得到子类空间的任意值,这样做和用类方法的差别是,/
# 它不能对子类空间进行增删#
三,静态方法
# class A:
# @staticmethod #引入这个装饰器
# def login(username,password):
# if username =='alex' and password == 666:
# print('登陆成功')
# else:
# print('登录失败')
# @staticmethod
# def func(): #该方法可以不传入任何参数 方便你的调用
# print(111)
# A.func() #直接用类名调用
# A.login('alex',123) #用类名调用静态方法
# 1,代码块清晰
# 2,复用性
浙公网安备 33010602011771号