python学习手册:第二十五章——oop

Posted 盈盈的月儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习手册:第二十五章——oop相关的知识,希望对你有一定的参考价值。

类通过继承进行定制

  • 超类(基类)列在了类开头的括号中
  • 类从其超类中继承属性
  • 实例会继承所有可读取类的属性
  • 每个object.attribute都会开启新的独立搜索
  • 逻辑的修改是通过创建子类对函数进行重写,而不是修改超类
  • 类名首字母应该大写

    一个demo

class FirstClass:
    def setdate(self,value): # 类中的方法使用时会隐式传入类本身和值,所以需要一个self来接收本身
        self.data = value # 新建类的一个变量并且赋值
    def display(self):
        print(self.data) # 调用类的变量,如果直接用data会会报错
class Second(FirstClass): # 重写类
    def display(self):
        print("Current value is %s"%self.data)
z = Second()
z.setdate(42)
z.display(42)
  • 进一步的demo
class FistClass:
    def setdate(self,value):
        self.data = value
    def display(self):
        print(self.data)
class Second(FistClass):
    def display(self):
        print("Current value is %s"%self.data)
class ThirdClass(Second):
    def __init__(self,value): # __init__作用为为类进行初始化
        self.data = value
    def __add__(self, other):
        return ThirdClass(self.data+other)
    def __str__(self): # 作用为输出类的描述性内容,当print时输出此内容
        return '[ThirdClass:%s]'% self.data
    def mul(self,other):
        self.data *= other
a = ThirdClass('abc')
a.display()
print(a)

b = a + 'xyz'
b.display()
print(b)

a.mul(3)
print(a)

# Current value is abc
# [ThirdClass:abc]
# Current value is abcxyz
# [ThirdClass:abcxyz]
# [ThirdClass:abcabcabc]

更多实例

class Person:
    def __init__(self,name,job = None,pay = 0):
        self.name = name
        self.job = job
        self.pay = pay
    def lastname(self):
        return self.name.split()[-1]
    def giveRaise(self,percent): # 涨工资方法
        self.pay = int(self.pay * (1 + percent))
    def __str__(self): # 每当打印类的时候调用这个方法
        return "[Person:%s,%s]"%(self.name,self.pay)
class Manger(Person): # 一个管理者类,每次涨薪水固定10%加提成
    def __init__(self,name,pay):
        Person.__init__(self,name,'mgr',pay)
    def giveRaise(self,percent,bonus = .10):
        Person.giveRaise(self,percent+bonus) # 直接调用原始代码逻辑,方便后期代码维护

if __name__ == "__main__" :
    bob = Person('Bob Smith')
    sue = Person('Sue Jones', job='dev',pay=100000)
    print(bob)
    print(sue)
    print(bob.lastname(),sue.lastname())
    sue.giveRaise(.10)
    print(sue)
    tom = Manger('Tom Jones',50000)
    tom.giveRaise(.10)
    print(tom.lastname())
    print(tom)
    print('-----all three -----')
    for object in (bob,sue,tom): # object仅仅是一个变量名,迭代对对象进行操作
        object.giveRaise(.1)
        print(object)

以上是关于python学习手册:第二十五章——oop的主要内容,如果未能解决你的问题,请参考以下文章

第二十五章 面向对象------封装内置函数反射动态导入

“全栈2019”Java多线程第二十五章:生产者与消费者线程详解

第二十五章-中介者模式

实战:第二十五章:HttpUtil代理

实战:第二十五章:HttpUtil代理

第二十五章 springboot + hystrixdashboard