2022.05.11 python基础知识_Day08

方法的动态性

方法没有重载,定义多个同名方法时,只有最后一个有效

python是动态语言,可以动态为类添加新的方法,修改类已有的方法

私有属性和私有方法(实现封装)

测试私有属性,私有方法

#测试私有属性、私有方法

class Employee:

    __company = "百战程序员"

    def __init__(self,name,age):
        self.name = name
        self.__age = age        #私有属性

    def __work(self):           #私有方法
        print("好好工作,赚钱娶媳妇!")
        print("年龄:{0}".format(self.__age))
        print(Employee.__company)



e = Employee("高淇",18)

print(e.name)
#print(e.__age)
print(e._Employee__age)   
print(dir(e))
e._Employee__work()
print(Employee._Employee__company)

访问私有属性,私有方法:

对象._类型__方法

对象._类型__属性

@property装饰器

将一个方法的调用转变成属性的调用

#@property装饰器的用法

class Employee:

    def __init__(self,name,salary):
        self.__name = name
        self.__salary = salary

    @property
    def salary(self):
        return self.__salary

    @salary.setter
    def salary(self,salary):
        if 1000<salary<50000:
            self.__salary = salary
        else:
            print("录入错误!薪水在1000--50000这个范围")


'''

    def get_salary(self):
        return self.__salary

    def set_salary(self,salary):
        if 1000<salary<50000:
            self.__salary = salary
        else:
            print("录入错误!薪水在1000--50000这个范围")
'''

emp1 = Employee("高淇",30000)
#print(emp1.get_salary())
#emp1.set_salary(2000)
#print(emp1.get_salary())

print(emp1.salary)
emp1.salary = 2000
print(emp1.salary)

面向对象三大特征

封装(隐藏):”细节封装起来“只对外暴露“相关调用方法”

继承:子类具有父类的特征,提高代码的重用性

           支持多重继承,一个子类可以继承多个父类, 格式:

 object是所有类的父类

子类重写,修改父类的方法

多态:同一个方法调用由于对象不同产生不同行为

object根类

dir()查看对象属性

重写__str__()方法

返回一个对于“对象的描述”

class Person:       #默认继承object类

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

    def __str__(self):
        return "名字是:{0}".format(self.name)

p = Person("高淇")
print(p)

运行结果及加str后的结果

 

 

 

mro()

打印类的层次结构
#测试mro()方法解析顺序
class A:
    def aa(self):
        print("aa")

    def say(self):
        print("say AAA!")

class B:
    def bb(self):
        print("bb")

    def say(self):
        print("say BBB!")
class C(B,A):
    def cc(self):
        print("cc")

c = C()
print(C.mro())          #打印类的层次结构
c.say()                 #解释器寻找方法是“从左到右”的方式寻找,此时会执行B类中的say()

运行结果

 super()获取父类的定义

A是B的父类,A.say(self) = super().say()

多态  

同一个人吃饭,有的用手,有的用筷子,有的用刀叉

特殊方法和运算符重载

每个运算符对应相应的方法

特殊方法统计如下

 

 特殊属性

 

设计模式——工厂模式

实现创造者和调用者的分离 

设计模式——单例模式

确保一个类只有一个实例,并提供一个访问该实例的全局访问点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值