【无标题】

1. 类和实例

类(Class):用来描述具有相同的属性和方法的对象的集合。定义了该集合中每个对象所共有的属性和方法。

类的实例:每个对象都属于特定的类,并被称为该类的实例(类的具体实体)封装

class Person:
    pass


print(Person, type(Person), id(Person))
# 结果:
# <class '__main__.Person'> <class 'type'> 2160244321968

# 实例一个对象
p1 = Person()
print(p1, type(p1), id(p1))
# 结果:
# <__main__.Person object at 0x00000220E6313A50> <class '__main__.Person'> 2340324194896

2.封装继承多态 

封装是指将数据(属性)和操作数据的方法(方法)捆绑在一起的机制。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @property
    def p_name(self):
        print("执行获取")
        return self.name

    @p_name.setter
    def p_name(self, name):
        print("执行设置")
        if 2 <= len(name) <= 4:
            self.name = name
        else:
            print("名字不合法")

p = Person("msy", 22)
p.p_name = "xxx"
print(p.p_name)

继承:子类继承父类属性和方法

super().

class Person():
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return f"名字:{self.name}"


class SuperPerson(Person):
    """
    子类SuperPerson 继承父类Person
    """

    def __init__(self, name, skill):
        super().__init__(name)
        self.skill = skill

    def __str__(self):
        return f"{super().__str__()} 技能:{self.skill}"


p1 = Person("msy")
print(p1)

sp1 = SuperPerson("懒洋洋", "睡觉")
print(sp1)

        多继承:一个子类可以同时继承多个父类的属性和方法。这使得子类可以具有多个父类的特性。

class Person1:
    def __str__(self):
        return "hhh"


class Person2:
    pass


class Person(Person2, Person1):
    pass


p1 = Person()
print(p1)
print(Person.mro())

#结果:

hhh
[<class '__main__.Person'>, <class '__main__.Person2'>, <class '__main__.Person1'>, <class 'object'>]

多态:

多态是指允许对象在不同的情况下表现出不同的行为,相同的方法调用可能会有不同的实现方式,具体取决于调用该方法的对象的类型或类的实现。

class Person:
    def log(self, *args):
        print(args)


p1 = Person()
print(p1.log("xxx", "hhh", 123))


class SuperPerson(Person):
    def log(self, *args, **kwargs):
        print(args, kwargs)


sp = SuperPerson()
print(SuperPerson.mro())
print(sp.log("msy", "abc", "123"))


class RobotPerson(Person):
    def log(self):
        print("机器人")


rb = RobotPerson()
print(rb.log())

3.构造函数:用于创建实例

class Manage:
    instance = None

    def __new__(cls, *args, **kwargs):
        """
        构造函数用于创建实例
        :param args:
        :param kwargs:
        """
        if not Manage.instance:
            Manage.instance = super().__new__(cls)
        return Manage.instance


m1 = Manage()
m2 = Manage()
print(id(m1), id(m2))

初始化函数:用于初始化实例 数据 ;self代表的就是未来构造出来的实例

        构造实例时会执行初始化函数,通过初始化函数初始化实例数据

class Person:
    def __init__(self, _name, _age):
        print("初始化函数", id(self))
        self.name = _name
        self.age = _age

析构函数: 用于内存之前的清理工作, 当实例不再被使用,执行实例的析构函数

    def __del__(self):
       
        print(f"析构函数执行")

转字符串函数:打印实例 打印str函数的返回值 只能返回字符串

    def __str__(self):
     
        return f"姓名:{self.get_name()}\t年龄:{self.get_age()}"

4. 实例属性:类内通过self.  类外通过 实例. 操作

实例方法: def... (self,) 第一个参数是self

类属性: 在类内直接设置的

类方法 :使用@classmethod 装饰器 第一个参数 cls

静态方法:单纯通过类名调用的快捷方式

    # 类属性:
    NAME = "msy"
    AGE = 22

    # 类方法:
    @classmethod
    def init_get_name(cls):
        print("abc", cls.__name__, cls.__base__, cls.__doc__)

    # 静态方法
    @staticmethod
    def Say_Hi():
        print("Hi 我是静态方法")

    # 初始化函数 给实例添加实例属性:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 实例方法:设置名字
    def init_name(self, name):
        self.name = name


print(Person.NAME, Person.AGE)  # 类访问类属性
Person.NAME = "xxx"  # 修改类属性
Person.AGE = 30
print(Person.NAME, Person.AGE)
Person.init_get_name()  # 类访问类方法
Person.Say_Hi()  # 类访问静态方法



p1 = Person("zh", "18")
print(p1.name, p1.age)

print(p1.NAME, p1.AGE)  # 实例访问类属性

p1.init_name("msy")
print(p1.name, p1.age)

5.普通成员:公开,所有位置都可以访问

保护成员:_   受保护 类内及子类可以访问 类外不推荐使用

私有成员: _ _   类外不能访问 封装成属性 可以访问

class Person:
    def __init__(self, name, age):
        # 私有 类外不能访问 封装成属性 可以访问
        self.__name = name
        # 受保护 类内及子类可以访问 类外不推荐使用
        self._age = age
        # 公开的 所有位置都可以访问
        self.address = None

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, name):
        self.__name = name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        self._age = age

    def __str__(self):
        return f"地址是{self.address}"


p1 = Person("msy", 22)
print(p1)
print(p1.name)
p1.name = "xxx"
print(p1.name)
print(p1.address)

print(p1.age)
p1.age = 30
print(p1.age)


class SuperPerson(Person):
    def set_age(self, age):
        self._age = age

    def get_age(self):
        return self._age


sp = SuperPerson("蜘蛛侠", 10)
sp.age = 20
print(sp.age)
print(sp.address)

6.多继承:子类继承多个父类 

单例类:一个类只能生成一个实例

class Manage:
    instance = None

    def __new__(cls, *args, **kwargs):
        """
        构造函数用于创建实例
        :param args:
        :param kwargs:
        """
        if not Manage.instance:
            Manage.instance = super().__new__(cls)
        return Manage.instance


m1 = Manage()
m2 = Manage()
print(id(m1), id(m2))


class AduioManage(Manage):
    pass


am1 = AduioManage()
am2 = AduioManage()
print(am1 is am2)

抽象类:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值