python 基础第八节

方法没有重载

python方法没有重载

其他语言同名方法,形参列表来区分

python参数类型没有区分所以无需重载

定义多个重名方法只有最后一个有效

方法的动态性

可以动态的为类添加新方法

方法也是对象 函数也是对象 一切都是对象

私有属性和私有方法python

python对于类的成员没有严格的访问控制限制,

两个下划线开头的属性是私有的

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

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

来歪不可以通过_类名__私有属性(方法)名 访问私有属性(方法)

注:方法本质上也是属性

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

e = Employee("yzy",18)
print(e.name)
print(e._Employee__age)  #访问私有属性

__方法名 是私有方法  调用时也用_类名__私有方法()

类变量也可以私有 __类变量名

@property装饰器

可以将方法的调用方式变为属性调用

只能调用方法 但不能设置方法  得到get set方法

继承

python继承,支持多重继承,一个子类继承多个父类,object是所有类的父类 ,里面定义了一些所有类的共有的默认实现

定义子类时必须在定义构造函数时调用父类的构造函数

父类名.__init__(self,参数)

必须显式的调用父类初始化方法,不然解释器不会去调用

私有的方法和属性子类继承不能直接用,如果要用需要s._父类名__属性名

dir()查看对象的所有属性

类成员的继承和重写

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

方法重写,子类可以重新定义父类中的方法,就会覆盖父类的方法,也称为重写

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

object类是所有类的父类

dir() 内置函数查看对象的所有属性

多重继承

aaa 一个子类可以有多个直接父类,不便于维护,避免使用

mro()

如果父类中有相同名字的方法,在子类没有指定父类名是,解释器将从左向右按顺序搜索

mro方法解析顺序,通过广度优先算法

super()获得父类定义

在子类中,想要获得父类的方法时,使用super()

多态

同一个方法调用由于对象不同可能会产生不同的行为

多态是方法的多态,属性没有多态

多态的方法有两个必要条件:继承,方法重写

class Man:
    def eat(self):
        print("饿了,吃饭“)

class Chinese(Man):
    def eat(self):
        print("中国人用筷子")

class English(Man):
    def eat(self):
        print(”英国人用叉子“)

def manEat(m):
    if isinstance(m,Man):  #如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例, 返回True
        m.eat()
    else:
        print("bunengchifan")

manEat(Chinese())
manEat(English())  #传参数是Man的子类实例,传的不一样,输出不一样

特殊方法和运算符重载

每个运算法实际上都对应了相应的方法  +  : __add__  等等

浅拷贝 深拷贝

一般都是浅拷贝 对象包含的子对象内容不拷贝,原对象和拷贝对象会引用同一个子对象

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

组合

is-a关系  继承

has-a 组合  也能实现一个类拥有另一个类的方法和属性

都可以起到代码复用的作用

class A2:
    def say_a2(self):
        print("a2")

class B2:
    def __init__(self,a):
        self.a = a

a2 = A2()
b2 = B2(a2)

b2.a.say_a2()

设计模式:工厂模式

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

设计模式实现分离 实现分工

实现各个类单独拿出来,创建不同类的对象合并到工厂类的函数里面

单例模式

核心作用是确保一个类只有一个实例,并且提供一个访问该实例的全局访问点

单利模式之声吃一个实例对象,减少了对系统资源的的开销

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值