Python3 基础:面向对象编程(上)

来源:互联网 发布:r语言编程艺术 pdf 编辑:程序博客网 时间:2024/05/15 01:27

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。
在Python中,定义类是通过class关键字.

class Student(object):   pass

解释: class表示定义一个类,Student表示类名,紧接着是(object),表示该类是从哪个类继承下来的.

创建实例是通过类名()实现的

kd = Student()

继续向下看:

class Student(object):    def __init__(self, name, score):        self.name = name        self.score = score

注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
__init__方法就类似于java的构造函数.
和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别.

访问限制

如果要让类内部属性不被外部访问,可以把属性的名称前加上两个下划线 __,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问.

class Student(object):def __init__(self, name, score):    self.__name = name    self.__score = scoredef print_score(self):    print('%s: %s' % (self.__name, self.__score))

改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.__name和实例变量.__score了.
如果你通过对象实例访问属性,会报错

AttributeError: 'Student' object has no attribute '__name'

这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。
如果要访问private的属性可以增加set get 方法.(和java一个套路)

在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名。
有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量,但是强烈建议你不要这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名。

0 0