Python基础知识day8

1.方法的动态性2.私有属性和私有方法关于私有属性和私有方法,有如下要点:(1)通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public)。(2)类内部可以访问私有属性(方法)(3)类外部不能直接访问私有属性(方法)(4)类外部可以通过“_类名__私有属性(方法)名”访问私有属性(方法)输出:孙小喵我的公司是: 百战程序员孙小喵 的年龄是: 23磨刀不误砍柴工,读完硕士再打工!233.@property装饰器@prop...
摘要由CSDN通过智能技术生成

1.方法的动态性

 2.私有属性和私有方法

关于私有属性和私有方法,有如下要点:

(1)通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public)。

(2)类内部可以访问私有属性(方法)

(3)类外部不能直接访问私有属性(方法)

(4)类外部可以通过“_类名__私有属性(方法)名”访问私有属性(方法)

 

 输出:孙小喵
我的公司是: 百战程序员
孙小喵 的年龄是: 23
磨刀不误砍柴工,读完硕士再打工!
23

3.@property装饰器

@property可以将一个方法的调用方式变成“属性调用”。

 输出:30000
<class 'int'> 

输出:月薪为10000,年薪为120000
10000
薪水录入错误!只能在0-50000之间

4.继承

Python支持多重继承,一个子类可以继承多个父类。继承的语法格式如下:

class 子类类名(父类1[,父类2,...]):

        类体

如果在类定义中没有指定父类,则默认父类是object类。也就是说,object是所有类的父类,里面定义了一些所有类共有的默认实现,比如:__new__()。定义子类时,必须在其构造函数中调用父类的构造函数。调用格式如下:父类名.__init__(self,参数列表)

 输出:孙小喵 的年龄是: 23

5.类成员的继承和重写

(1)成员继承:子类继承了父类除构造方法之外的所有成员。

(2)方法重写:子类可以重新定义父类中的方法,这样就会覆盖父类的方法,也称为“重写”。

 输出:孙小喵 的分数是: 100
报告老师,我是 孙小喵
孙小喵 的年龄是: 23

6.查看类的继承层次结构

通过类的方法mro()或者类的属性__mro__可以输出这个类的继承层次结构。

7.object根类

object类是所有类的父类,因此所有的类都有object类的属性和方法。

8.内置函数dir(),他可以让我们方便的看到指定对象所有的属性。

【测试】查看对象所有属性以及和object进行比对

 输出:['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'name', 'say_age']

从上面我们可以发现这样几个要点:

(1)Person对象增加了六个属性:__dict____module____weakref__agenamesay_age

(2)object的所有属性,Person类作为object的子类,显然包含了所有的属性。

(3)我们打印age、name、say_age,发现say_age虽然是方法,实际上也是属性。只不过,这个属性的类型是“method”而已。

age<class'int'>

name<class'str'>

say_age<class'method'>

9.object有一个__str__()方法,用于返回一个对于“对象的描述”,对应于内置函数str()经常用于print()方法,帮助我们查看对象的信息。__str__()可以重写。

 输出:名字是:孙小喵,年龄是23

10.Python支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,解释器将“从左向右”按顺序搜索。MRO(MethodResolutionOrder):方法解析顺序。我们可以通过mro()方法获得“类的层次结构”,方法解析顺序也是按照这个“类的层次结构”寻找的。

11.在子类中,如果想要获得父类的方法时,我们可以通过super()来做。super()代表父类的定义,不是父类对象。

12.关于多态要注意以下2点:(1)多态是方法的多态,属性没有多态。(2)多态的存在有2个必要条件:继承、方法重写。

 输出:小狗,汪汪汪
小猫,喵喵喵

13.特殊方法和运算符重载

 

              

 操作:“运算符的重载”

 输出:孙小喵--孙喵喵
孙小喵孙小喵孙小喵14. 

14.特殊属性

 15.对象的浅拷贝和深拷贝

变量的赋值操作只是形成两个变量,实际还是指向同一个对象。

·浅拷贝:Python拷贝一般都是浅拷贝。拷贝时,对象包含的子对象内容不拷贝。因此,源对象和拷贝对象会引用同一个子对象。

·深拷贝:使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象。源对象和拷贝对象所有的子对象也不同。

 输出:计算,算个12345
CPU对象: <__main__.CPU object at 0x000001905029AAC8>
<__main__.MobilePhone object at 0x00000190502EB108> <__main__.MobilePhone object at 0x00000190502EB108>
<__main__.MobilePhone object at 0x00000190502EB108> <__main__.MobilePhone object at 0x00000190502EB188>
计算,算个12345
CPU对象: <__main__.CPU object at 0x000001905029AAC8>
计算,算个12345
CPU对象: <__main__.CPU object at 0x000001905029AAC8>
计算,算个12345
CPU对象: <__main__.CPU object at 0x00000190502EB208>

16.组合

“is-a”关系,我们可以使用“继承”。从而实现子类拥有的父类的方法和属性。“is-a”关系指的是类似这样的关系:狗是动物,dog is animal。狗类就应该继承动物类。

“has-a”关系,我们可以使用“组合”,也能实现一个类拥有另一个类的方法和属性。”has-a”关系指的是这样的关系:手机拥有CPU。MobilePhone has a CPU。

 输出:计算,算个12345
显示一个好看的画面

17.设计模式_工厂模式实现

初学者,我们学习两个最常用的模式:工厂模式和单例模式。

工厂模式实现了创建者和调用者的分离,使用专门的工厂类将选择实现类、创建对象进行统一的管理和控制。

 输出:<__main__.Benz object at 0x000001FAAFAB3F48>
<__main__.BMW object at 0x000001FAAFAB3948>

18.设计模式_单例模式实现

单例模式(SingletonPattern)的核心作用是确保一个类只有一个实例,并且提供一个访问该实例的全局访问点。单例模式只生成一个实例对象,减少了对系统资源的开销。当一个对象的产生需要比较多的资源,如读取配置文件、产生其他依赖对象时,可以产生一个“单例对象”,然后永久驻留内存中,从而极大的降低开销。单例模式有多种实现的方式,我们这里推荐重写__new__()的方法。

 输出:init....
<__main__.MySingleton object at 0x00000299F1E16448>
<__main__.MySingleton object at 0x00000299F1E16448>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值