python类的封装,继承和多态

1 python类的封装

简单的讲就是将众多属性和方法在类里面实现,外部通过接口访问。

属性的隐藏,先看一个例子:

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

    def say(self):
        print("I name is {} and {} years old.".format(self.name, self.age))


if __name__ == '__main__':
    xiaoming = Person1("xiaoming", 12)
    xiaoming.say()

在这个例子中Person1类有两个属性,我们可以直接通过xiaoming加.符号来访问其属性,例如:

    xiaoming.age = 13
    print(xiaoming.age)

实际上对于人的名字和年龄是不能随便改的,因此我们需要使用一个技术“隐藏”,使得外界只能看,不能改

代码如下:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self._age

    def say(self):
        print("I name is {} and {} years old.".format(self.name, self.age))

if __name__ == '__main__':
    xiaoming = Person("xiaoming", 12)
    xiaoming.say()

    xiaoming.age = 13
    print(xiaoming.age)

在这个例子中实际的变量是self._name, self._age, 外界看不出来,以为还是self.name, self.age

方法是通过装饰器@property将真正的变量遮挡起来,这种手段即隐藏

2 类的继承

通过在定义的新类后面加上待继承的类实现继承

扫描二维码关注公众号,回复: 15055703 查看本文章

示例:

from person2 import Person

class Student(Person):
    def __init__(self, name, age):
        super().__init__(name, age)


xiaozhang = Student("xiaozhang", 11)
xiaozhang.say()

这里有两点需注意:

1 Person为父类,Student为子类,子类拥有父类的一切特性(属性和方法)

2 super()函数可以调用一切父类的属性和方法(被隐藏的除外)

验证:print(super()._age)        # 这儿会报错,说找不到对应的变量

3 类的多态

同一个方法,不同的行为

示例代码

from person2 import Person

class Student(Person):
    def __init__(self, name, age):
        super().__init__(name, age)

    def say(self):
        print("My name is {} and {} years old and I am in 6 grade.".format(self.name, self.age))

class Programmer(Person):
    def __init__(self, name, age):
        super().__init__(name, age)

    def say(self):
        print("I am a Programmer.My name is {} and {} years old.".format(self.name, self.age))

xiaozhang = Student("xiaozhang", 11)
xiaozhang.say()

Join = Programmer("Join", 35)
Join.say()

猜你喜欢

转载自blog.csdn.net/luhouxiang/article/details/127035409
今日推荐