Python重点知识二:面向对象的三大特点

"""
三大属性:
    封装:储存数据,储存方法
    继承:子继承父,方法继承,数据继承
    多态:方法重写,内置函数重写
"""

"""
    继承 - 方法
        现象:
            代码不用子类写,但是可以直接使用
        适用性:
            多个类型有共性的代码,且在概念上统一
"""


# 在设计软件时,应该先有子再有父
# 在编写软件时,应该先有父再有子
class Person:
    def say(self):
        print("讲话")


class Student(Person):
    def play(self):
        self.say()
        print("玩耍")


class Teacher(Person):
    def teach(self):
        print("教学")


stu = Student()
stu.play()

# 创建子类对象,可以访问父类成员,也可以访问自身成员
tea = Teacher()
tea.say()
tea.teach()

# 创建父类对象,只能访问自身成员
per = Person()
per.say()

# 关系的判定
# 1. 对象 是一种 类型
# isinstance(对象,类型)
# 学生对象是一种学生类型
print(isinstance(stu, Student))  # True
# 学生对象是一种人类型
print(isinstance(stu, Person))  # True
# 人对象是一种学生类型
print(isinstance(per, Student))  # False

# 2. 类型 是一种 类型
# issubclass(类型,类型)
# 学生类型是一种学生类型
print(issubclass(Student, Student))  # True
# 学生类型是一种人类型
print(issubclass(Student, Person))  # True
# 人类型是一种学生类型
print(issubclass(Person, Student))  # False

# 3. 对象的类型 是 类型
# type(对象) == 类型
# 学生对象的类型是学生类型
print(type(stu) == Student)  # True
# 学生对象的类型是人类型
print(type(stu) == Person)  # False
# 人对象的类型是学生类型
print(type(per) == Student)  # False

"""
    继承 - 数据
"""


class Person(object):
    def __init__(self, name="", age=0):  # 3
        self.name = name
        self.age = age


class Student(Person):
    pass


class Teacher(Person):
    def __init__(self, name, age, salary=0):  # 2
        super().__init__(name, age)
        self.salary = salary


per_lmj = Person("lily", 26)

# 1. 子类没有构造函数,使用父类的
stu_lmj = Student("lily", 26)
print(stu_lmj.__dict__)

# 2. 子类有构造函数,覆盖父类的
#    此时必须通过super()函数调用父类构造函数
tea_lmj = Teacher("lily", 26, 10000)  # 1
print(tea_lmj.__dict__)
"""
    多态
        -- 重写:在子类中,具有和父类相同(名称、参数)的方法
        #      在特定的时机,由框架自动调用
        # 方法重写,内置函数重写
"""


# 魔法函数:
class Person(object):
    def __init__(self, name="", age=0):  # 3
        self.name = name
        self.age = age

    # 自定义对象 --> 字符串
    def __str__(self):
        return f"{self.name}的年龄是{self.age}"

    # 自定义对象 --> 整数
    def __int__(self):
        return self.age


ljm = Person("lily", 26)
jzl = Person("jack", 25)
print(ljm)  # 直接打印自定义对象,<__main__.Person object at 0x7f5bc52747c0>
print(jzl)  # print函数内部: jzl.__str__()

print(int(ljm))

# ----扩展:自定义对象与字典的转换----
print(ljm.__dict__)
dict_ljm = {'name': 'lily', 'age': 26}
print(Person(**dict_ljm))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值