day18 继承

day18 继承

1.继承
  1. 什么继承

    1. 字类直接拥有父类的属性和方法
      1. 字类:继承者
      2. 父类:被继承,父类又叫超类
      3. 如果定义类的时候没有加括号,默认继承python的基类object
      4. 同一个字类可以同时继承多个父类:class 字类(父类1,父类2····)
      5. 在python中字类可以继承父类的所有的属性和方法
      6. 在子类中可以通过super().方法的形式来调用父类的方法,不能在静态方法中调用
  2. 怎么继承

    # class 字类(父类):
    #	pass
    
    
    
2.重写
  1. 早字类中添加属性和方法
    1. 添加类属性:直接在子类中定义新的类属性
    2. 添加方法:直接在类中添加新的方法
    3. 子类中条件方法的时候可以对父类的方法进行重写

2.可以通过super在字类中调用父类中的方法

​ super().方法() – 直接调用当前类的父亲的指定方法

super(类,对象).方法 – 调用指定类的父类的指定方法(要求对象必须是前面的类对象)

3.添加对象属性
在字类__init__方法中通过super()去调用父类的__init__.

3.对象属性的添加问题

创建一个人类有属性:姓名、年龄、性别,要求创建人的对象的时候姓名和年龄必须赋值,性别可以赋值也可以不赋(默认是男)
创建学生类有属性:姓名、年龄、性别、学号、学分和电话,要求创建学生对象的时候,姓名和电话必须赋值。
年龄和性别可以赋值也可以不赋(默认是18和年),学分和学号创建的时候不能赋值,默认值分别是’000’和0


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


class Student(Person):
    def __init__(self, name, tel, age=18, gender='男'):
        super(Student, self).__init__(name, age, gender)
        self.study_id = '000'
        self.score = 0
        self.tel = tel
四.私有化

访问权限(编程常识):

公开的:在类的内部可以使用、类的外部也可以使用还可以被继承 (Python中所有的属性和方法都是公开)
保护的:在类的内部可以使用、可以被继承
私有的:只能在类的内部可以使用

python的私有化
方法:在属性名或者方法名前加__就可以让属性或者方法变成私有的
原理:假的私有化; 在__开头的名字前加’_类名’

class A:
    num = 100
    __x = 200    # __x是私有的

    def __init__(self):
        self.name = '小明'
        self.__age = 18   # __age是私有的

    def info(self):
        print('信息:', self.__age)
        self.__f1()

    @classmethod
    def show(cls):
        print(cls.num, cls.__x)

    def __f1(self):
        print('对象方法')


print(A.num)
A.show()

# print(A.__x)

a = A()
print(a.name)
# print(a.__age)

a.info()

# a.__f1()

print(a.__dict__)   # {'name': '小明', '_A__age': 18}
print(a._A__age)    # 18
五.拷贝

浅拷贝和深拷贝的区别:
不管是浅拷贝还是深拷贝都是赋值被拷贝的对象产生一个新的对象,然后用新的对象来赋值。
如果被拷贝的对象中有子对象,浅拷贝不复制子对象用原来的,深拷贝会复制子对象产生新的子对象

class Dog:
    def __init__(self):
        self.name = '旺财'
        self.gender = '公狗'

    def __repr__(self):
        return f'<{str(self.__dict__)[1:-1]},id:{id(self)}>'


class Person:
    def __init__(self, name, age=18, gender='女'):
        self.name = name
        self.age = age
        self.gender = gender
        self.dog = Dog()

    def __repr__(self):
        return f'<{str(self.__dict__)[1:-1]}, id:{id(self)}>'
六内存管理

内存管理分为内存的开辟和释放:
1.内存的开辟 - 使用数据时候的就申请内存保存数据
“”"
python中所有的类型都是类,所有的数据都是对象,对象都保存在堆里面。
在保存数据的时候相同的不可变数据内存中只保存一份,相同的可变数据在内存中一定会保存多份
“”"

print(type(10))

a = 100
age = 100
list1 = [100, 200]
print(id(a), id(age), id(list1[0]))

a = [10, 20]
b = [10, 20]
c = [100, [10, 20]]
print(id(a), id(b), id(c[-1]))

 

2.内存的释放 - 垃圾回收机制
“”"
python中内存的某个数据是否销毁(对应的内存是否释放),看这个数据在程序中的引用个数,当引用个数大于0的时候数据不会被销毁,
当数据的引用个数为0的时候数据会被自动销毁。
“”"

A = 100
del A

B = A   # NameError: name 'A' is not defined
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
向上转型是指将一个子类对象赋值给父类类型的变量,通过向上转型可以实现继承的多态性。多态性是指同一类型的对象在不同情况下表现出不同的行为。在向上转型中,父类对象可以引用子类对象,但只能调用父类中定义的方法和属性。这样做的好处是可以提高代码的灵活性和可复用性。通过向上转型,可以实现对父类对象的统一管理,只需要一个父类类型的引用变量就可以操作不同子类的对象,这样可以避免编写大量重复的代码。同时,向上转型还可以实现动态绑定,即在运行时根据对象的实际类型来确定调用哪个类的方法。这样可以实现不同子类的不同行为,提高了程序的扩展性和可维护性。因此,继承的多态性通过向上转型可以实现动态绑定和统一管理不同子类对象的优势。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [从向上转型走进java多态性](https://blog.csdn.net/daocaowuwu/article/details/121713221)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Day10 Java多态性继承关系中'向上转型'和'向下转型(还原)'的演示例子与作用及规则的详解.](https://blog.csdn.net/chinatopno1/article/details/103376577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值