https://www.cnblogs.com/feeland/p/4409130.html Python 面向对象 —— 类和实例类虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程。至于何为面向对象,在此就不详说了。面向对象程序设计本身就很值得深入学习,如要了解,请参阅网上其他的资料。 面向对象最重要的概念就是类(Class)和实例(Instance),牢记 类 是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。 以Student类为例,在Python中,定义类是通过 注意:Python 2.X 需要在类名后面加 (object) 这边 pass 语句表示空语句段。 class Student(object): pass Python 3.X 则只需要类名,不需要加 (object) class Student: pass 实例创建实例是通过类名+()实现的(若 __init__ 无或仅有self);如定义好了Student类,就可以根据Student类创建出Student的实例,如下: class Student(object): passMay = Student() # 新建May实例print(May) 可以看到,变量May指向的就是一个Student的object,后面的0x006C4770是内存地址,每个object的地址都不一样,而Student本身则是一个类。 可以自由地给一个实例变量绑定属性,比如,给实例 May 绑定一个 name 属性,这个 name 属性是实例 May 特有的,其他新建的实例是没有 name 属性的 1 class Student(object):2 pass3 May = Student() # 新建May实例4 print(May)5 May.name = "May" # 给实例 May 绑定 name 属性为 "May"6 print(May.name)7 Peter = Student() # 新建Peter实例8 # print(Peter.name) # 报错,因为Peter没有Name属性 那么,如果我们需要类必须绑定属性,那如何定义呢? 请参见下文。 __init__ 构造函数由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。 (注意 __init__ 双下划线) 如对于Student类,我们定义 name 和 score 属性(所有Sudent 都须有的属性): __init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。 有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去: 1 class Student(object):2 def __init__(self, name, score):3 self.name = name4 self.score = score5 6 May = Student("May",90) # 须要提供两个属性7 Peter = Student("Peter",85)8 print(May.name, May.score)9 print(Peter.name, Peter.score) __del__ 析构函数
相对于 构造函数 Python 也有类似 C++ 中的析构函数 __del__ , Python的垃圾回收过程与常用语言的不一样,如果一定需要,最好需要使用del语句来激活。 私有变量
Python 中定义私有变量,命名规则为前缀加两个下划线 “__” ,注意不可前后都包含__XXX__(该命名表示为类属性或内建变量);还有一种命名为单下划线 _XXX ,表示约定俗成不可访问的变量。 |
|