析构方法__del__() 对象被销毁 程序退出 作用域被释放
#析构方法
class Animal:
def __init__(self,name):
self.name=name
print('构造初始化方法')
pass
def __del__(self):
print('这是析构方法')
pass
pass
cat=Animal('small_cat')
print('aaa')
# 构造初始化方法 aaa 这是析构方法
del cat #手动调用时 析构方法也会执行
封装 继承 多态
继承: 子类可以直接使用父类的方法
class Cat(Animal): #cat子类继承animal父类 单继承
pass
class dog(Eat,Drank) #多继承
pass
super().__init(name,age) #自动调用父类方法
Animal.__init(self,name,age) #手动调用
mro() :方法执行顺序
多态: 对不同子类对象有不同的行为表现,灵活性和扩展性
定义时类型与运行时类型不一样
两个前提: 1.继承 父类 子类之间 2.重写
类属性:就是类对象所拥有的属性
实例属性:实例对象拥有的属性
修改类属性 :类型.属性=‘aa’ Student.name=‘xiaowang’
类方法@classmethod和静态方法@staticmethod:
类方法 第一个参数是类对象 cls
静态方法 不需要参数
print('--------------')
class People:
country='china'
@classmethod #类方法 第一个参数必须是类对象
def get_country(cls):
return cls.country #访问类属性
@classmethod #类方法修改类属性
def change_country(cls,data):
cls.country=data
pass
@staticmethod #静态方法:主要来存放逻辑性的代码,本身没有交互 数据不会改变
def getData():
return People.country
pass
print(People.get_country()) #通过类对象去引用
People.change_country('unit states')
print(People.country)
People.change_country('england')
p=People()
print(p.getData()) # 一般不会实例对象来访问类属性
import time
print(time.localtime())
私有化属性 :保存属性安全 属性以两个下划线开头 声明私有化 可以在类内部访问和修改
# 私有化属性
# 场景:把特定属性藏起来
# 保护属性 不能随意改变 不让子类继承
class Person:
__hobby='打篮球'
def __init__(self):
self.__name='李四' # 将此属性私有化 在类的内部可以访问
self.age=18
pass
xl=Person()
print(xl.name) # 类对象外部访问
# 私有化的实例属性 不能在外部直接访问 只可以在类内部随意使用
# 子类不能继承父类私有化属性
# 属性前加两个下划线直接私有化
私有化方法 :方法名前加两个下划线
def __eat(self):
print("eat")
pass
property属性函数 age=property(get_age,set_age)
class Person:
def __init__(self):
self.__age=18
pass
def get_age(self):
return self.__age
def set_age(self,age):
if age < 0:
print('输入错误')
pass
else:
self.__age=age
pass
# 定义一个类属性 实现通过直接访问属性方式去访问私有属性
age=property(get_age,set_age)
p1=Person()
print(p1.age) #使用get_age方法
p1.age=-1 #使用set_age方法
print(p1.age)
# 私有化属性
# 场景:把特定属性藏起来
# 保护
装饰器修饰属性 @property @属性名.setter
# 装饰器修饰
class Person:
def __init__(self):
self.__age=18
pass
@property # 装饰器修饰 添加属性标志 提供一个getter方法
def age(self):
return self.__age
@age.setter # 提供一个setter方法
def age(self,parms):
if parms < 0:
print('输入错误')
pass
else:
self.__age=parms
pass
p1=Person()
print(p1.age)
p1.age=30
print(p1.age)