python学习日记9

今天开始学习面向对象的编程。

多态

此处闲话少叙,进一步了解请自行搜索。无需知道对象所属的类,就能调用其方法。例如,在python中,加号就是一个具有多态的运算符,它即可以处理数字,又可以处理字符串。我们编写的类也最好是多态的。多态形式是面向对象的核心,又称为“鸭子类型”(源于一个说法“如果走起来像鸭子,叫起来像鸭子,那么它就是鸭子。”)。

封装

封装与多态都遵循抽象的原则,封装使我们无需知道对象的构造就能使用它。调用时,无需操心其他事情,我们仅仅把它当作一个属性。每个对象都有自己的状态,对象的状态由其属性描述,对象的方法可以修改这些属性。

继承

例如,我们编写一个类,还想编写一个和这个类高度相似的类,这时候我们无需将上一个类的代码复制过去,我们只需用新类调用旧类,这样就实现了继承。

上面这些概念可能有些难以理解,不过没关系,通过下面的学习将进一步理解上面的内容。

什么是类

类是一种对象,每个对象都属于特定的类,并被称为该类的实例。例如,鸟属于鸟类,麻雀是鸟类的子类,鸟类是麻雀的超类。

创建自定义类

示例:

class person:
    def setName(self,name):
        self.name=name
    def getName(self):
        return self.name
    def greet(self):
        print("Hello, my name is {}.".format(self.name))

class语句创建一个独立的命名空间,用于定义函数。self为对象本身。我们可以使用如下示例调用上面的对象:

a=Person()
b=Person()
a.setName('LiLei')
b.setName('HanMeimei')
print(a.getName(),b.getName(),a.greet())

属性、函数和方法

我们也可以把方法关联到一个所属的实例。

class Person:
    def greet(self):
        return "Hello"
a=Person()
def func():
    return "Hi"
print(a.greet())
a.greet=func
print(a.greet())

我们也可以将一个变量指向一个方法。

隐藏

关于类的上例,我们可以在外部调用类中的变量。如果想避免从外部访问,我们可以将其设为私有(private),即在函数名称前打两个下划线即可。

class Person:
    def pub(self):
        return "Hello"+self.__pri()
    def __pri(self):
        return "Hi"
a=Person()
print(a.pub())

这样我们如果在类的外部访问pri就会报错。不过由于py的后台处理机制,我们仍然有办法从外部访问:

class Person:
    def pub(self):
        return "Hello"+self.__pri()
    def __pri(self):
        return "Hi"
a=Person()
print(a._Person__pri())

当然,作为一种惯例,我们可以加一个下划线。在from module import * 的时候不会导入一个下划线开头的名称。

类的命名空间

类中并非只能包含def语句,当我们在其他实例中给类中的变量赋值时,会发生遮盖问题。

知识共享许可协议
Text is available under CC BY-NC-SA 4.0 unless otherwise stated.

除非特殊声明,本站所有内容均以 CC BY-NC-SA 4.0协议授权。
上一篇
下一篇