python面向对象的升华,析构方法,面向对象的特性,封装继承多态等介绍和简单运用。私有化属性等

本文深入探讨了Python面向对象编程(OOP)的基本概念,包括构造和析构方法的作用、继承的使用方式、多态的灵活性及其实现方法。此外,还介绍了类属性与实例属性的区别、类方法与静态方法的应用场景,以及如何利用私有化属性和方法保护对象的数据安全。
摘要由CSDN通过智能技术生成

析构方法__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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值