“”"
直接定义在类中的变量就是类属性 类属性的值不会应为对象不同而不一样
通过self.属性名=值 定义在init函数中的属性 对象属性的值会因为对象不同而不一样 “”"
class Person: num=61 x=100 print(Person.num) Person.num=60“”" 对象.属性-获取对象指定属性对应的值 getattr(对象,属性名)-获取对象指定属性对应的值;属性不存在会报错 getattr(对象,属性名,默认值)-获取对象指定属性对应的值,属性不存在不会报错返回默认值 “”" print(stu1.name)
print(getattr(stu1,‘name’)) print(getattr(stu1,‘age’)) print(getattr(stu1,‘name’,‘无名氏’)) print(getattr(stu1,‘name1’,‘无名氏’))
“”" 对象.属性=值 - 当属性不存在就给对象添加属性,属性存在的时候就修改指定属性的值 setattr(对象,属性名,值) “”" 属性存在是修改
stu1.name='xiaoming' print(stu1) stu1.height=180 print(stu1) print(stu1.height) setattr(stu1,'age',18) print(stu1) setattr(stu1,'weight',80) print(stu1)“”" del 对象.属性 “”"
“”" 公开的:在类的内部和外部都可以使用,也能被继承 保护的:在类的内部可以使用,类的外部不能使用,可以被继承 私有的:只能在类的内部使用,不能被继承 严格来说,Python中所有的属性和方法都是公开的,这儿说的私有化其实是假的私有化 “”"
class Person: num =100 __num2=61 def __init__(self): self.name='小明' self.age=10 def eat(self): print(f'{self.name}在吃饭') p1=Person() print(Person.num) print(p1.name,p1.age) p1.eat() #print(Person.__num2)“”" getter作用:在获取某个属性值之前想要做别的事情,就给这个属性添加getter setter作用:在给属性赋值之前想要做别的事情,就给这个属性添加setter “”"
“”"
第一步:在需要添加getter的属性名前加_ 第二步:定义getter对应的函数(1.需要@property装饰器 2.函数名就是不带下划线的属性名3.函数需要一个返回值) 第三部:获取属性值的通过:对象.不带_属性名(本质就是在调用getter对应的函数,取到的属性就是函数的返回值)
如果想要给属性添加setter必须想给数学添加getter 第一步:添加getter 第二步:定义setter对应函数(1.需要@getter函数名.setter装饰器2.需要一个参数,不需要返回值,这个参数就是尝试给属性赋的值) 第三步:通过给属性赋值:对象.不带_属性名=值(本质就是在调用setter对应的函数) “”"
class Person: def __init__(self): self.gender=True class Rect: def __init__(self,length=0,width=0): self.length=length self.width=width self._area=length*width @property def area(self): self._area=self.width*self.length return self._area @area.setter def area(self,value): print(f'value:{value}') #self._area=value raise ValueError p1=Person() print(p1.gender) r1=Rect(4,5) print(r1.area) # 不能让矩形直接修改面积的属性值 r1.width=10 print(r1.area) r1.length=10 print(r1.area)