python类的基础知识2

10.10 实例属性的更改

10.10.1 在类的外部做实例属性的修改

class DogInfo(object):
    def __init__(self,leg):
        #初始化操作,定义的是属性,实例属性
        self.leg = leg
    def bark(self):
        #在方法中调用实例属性
        print(self.leg)
        print('狗会叫')

    def showleg(self):
        print('这条狗的腿有',self.leg,'条')
    def __str__(self):
        return '狗'


dog = DogInfo(4)
print('更改之前的实例属性',dog.leg)
print('做完移植')
dog.leg = 5
print('更改之后的实例属性',dog.leg)
dog.showleg()

展示
更改之前的实例属性 4
做完移植
更改之后的实例属性 5
这条狗的腿有 5 条

10.10.2 在类的内部做修改

class DogInfo(object):
    def __init__(self,leg):
        #初始化操作,定义的是属性,实例属性
        self.leg = leg
    def bark(self):
        #在方法中调用实例属性
        print(self.leg)
        print('狗会叫')
    def change_leg(self,newleg):
        self.leg = newleg
    def showleg(self):
        print('这条狗的腿有',self.leg,'条')
    def __str__(self):
        return '狗'


dog = DogInfo(4)
print('更改之前的实例属性',dog.leg)
print('做完移植')
dog.change_leg(5)
print('更改之后的实例属性',dog.leg)
dog.showleg()

展示:
更改之前的实例属性 4
做完移植
更改之后的实例属性 5
这条狗的腿有 5 条

10.11 继承

10.11.1 继承

class ChickenSoup(object):
    '''祖传鸡汤(爷爷的秘方)'''
    def __init__(self):
        self.name = '祖传鸡汤'

    def cook(self):
        print('做法:田园鸡500g 大料 40g 盐10g')

class NewChickenSoup(ChickenSoup):
    '''爷爷传给父亲的,父亲的秘方'''
    def __init__(self):
        self.name = '祖传鸡汤2.0版本'
    pass

new = NewChickenSoup()
new.cook()
print('鸡汤的名字',new.name)

注意点:
1、继承关系中,子类继承父类的方法与属性
	即:子类可以使用父类的属性和方法
2、如果子类的方法与父类是同名的,使用子类自己的属性
3、如果子类已经有自己的__int__这个方法,没有特殊操作,不能直接调用父类的属性

10.11.2 多继承

class NewChickenSoup(ChickenSoup,NewEast):
    '''爷爷传给父亲的,父亲的秘方'''
    def __init__(self):
        super(NewChickenSoup, self).__init__()
        self.name1 = '祖传鸡汤2.0版本'
    pass
    
注意点:
当前类继承于多个类,多个类写在括号中

10.11.3 多层继承

class NewEast(object):
    def bbq(self):
        print('烧烤秘方')
    def birdsoup(self):
        print('鸽子汤')

class NewChickenSoup(ChickenSoup,NewEast):
    '''爷爷传给父亲的,父亲的秘方'''
    def __init__(self):
        super(NewChickenSoup, self).__init__()
        self.name1 = '祖传鸡汤2.0版本'
    pass
    
   NewChickenSoup ------->  NewEast -------> object 
  父类---子类  基类---派生类 
 

10.11.4 查找顺序

print(NewChickenSoup.__mro__)
(<class '__main__.NewChickenSoup'>, <class '__main__.ChickenSoup'>, <class '__main__.NewEast'>, <class 'object'>)

注意点:
多继承的查找顺序与继承的类的位置有关系

10.11.5 继承的权限问题

在继承的时候,有些属性和方法,不想被子类所继承,设置权限

私有属性与私有方法

class NewEast(object):
    def __init__(self):
        self.__money = '2亿'
    def bbq(self):
        print('烧烤秘方')
    def birdsoup(self):
        print('鸽子汤')

class NewChickenSoup(NewEast):

    def cook(self):
        print('做法:田园鸡500g 大料 40g 盐10g 孜然50g')

new = NewChickenSoup()
# print(new.money)

新东方=NewEast()
print(新东方.__money)

注意点:
1、私有属性:__属性名,不能被子类所调用,在类的外面,也不能被自己的实例所调用
2、但是私有属性可以在类的内部调用

保护属性与保护方法

class NewEast(object):
    def __init__(self):
        self.__money = '2亿'
        self._golden = '2斤'
        self.name = '新东方绝技'
    def _bbq(self):
        print('烧烤秘方')
        print('最赚钱',self.__money)
    def birdsoup(self):
        print('鸽子汤')
        
  

10.11.6 重写与调用父类的方法

class NewEast(object):
    def cook(self):
        print('鸽子汤')

class NewChickenSoup(NewEast):
    def cook(self):
        print('做法:田园鸡500g 大料 40g 盐10g 孜然50g')
        
class NewEast(object):
    def cook(self):
        print('鸽子汤')

    def cook1(self):
        print('鸽子汤')
class NewChickenSoup(NewEast):
    def cook(self):
        super(NewChickenSoup, self).cook()
        super().cook()
        NewEast.cook(self)
        print('做法:田园鸡500g 大料 40g 盐10g 孜然50g')

new = NewChickenSoup()
new.cook()

上一篇:java 继承


下一篇:linux会话命令screen详解