python之路---类

1.类里定义的变量函数等称为这个类的属性

  除数据属性(也叫实例变量)外,类实例的另一类属性就是方法。

2.类定义可以写在程序里的任何地方,这一点与函数定义的情况类似。

  例如:可以把类定义放在某个函数定义里,或者放在另一个类定义里---------建立了一个局部的类定义,

     但通常把类定义写在模块最外层,这样定义的(类)类型在整个模块里都可以用,而且允许其他模块里通过import语句导入和使用。

3.python语言里,所有属性引用(属性访问)都采用圆点记法。

4.每个类对象都有一个默认存在的__doc__数据属性,其值是该类的文档串。即注释内容

  对象.__doc__(或类.__doc__)

5.(1)如果在一个类里定义了__init__方法,在创建这个类的实例时,Python解释器就会自动调用这个方法。

   (2)__init__第一个参数是self,其总表示当前正在创建的对象。

 (3)p = Person('fengyu')  完成的一系列动作:

      ①创建一个Person类型的对象;

      ②调用Person类的__init__函数给这个对象的name数据属性(__init__函数中的属性)赋值;

      ③返回新建的对象

      ④最后, 赋值语句把这个新对象赋给变量p,作为其约束值。如p的name属性。被约束于字符串'fengyu'。

6.每一个实例对象是一个局部名称空间,其中包含该对象的所有数据属性及其约束值。

 如果建立的是空对象(p = Person(),p就是空对象),它就有一个空的名称空间。

7.Python允许在任意方法里给原本没有的(也就是说,初始化函数没建立的)属性赋值,这种赋值将扩大该对象的名称空间。但在实际中这种做法并不多见。

8.一个实例对象是一个独立的数据体,可以像其他对象一样赋给变量作为约束值,或者传进函数处理,或者作为函数的结果返回等。

 实例对象也可以作为其他实例对象的属性值(无论是同属一个类的实例对象,或不属于同一个类的实例对象),即组合。

9.类定义的作用域规则:

  在类里定义的名字具有局部作用域,在类里和类外使用,需基于类名或对象名的属性引用方式,即类名(对象名).名字

  类的局部作用域和函数的局部作用域有不同的规定:

      函数:局部名字的作用域自动延伸到内部嵌套的作用域。

      类:不自动延伸,所以要用基于类名或对象名的属性引用方式

 10.继承的两个作用:

  (1)减少重复性代码;

  (2)建立一组类(类型)之间的继承关系,利用这种关系有可能更好的组织和构造复杂的程序。

11.内置函数super,把它用在派生类的方法定义里,就是要求从这个类的直接基类开始做属性检索(而不是从这个类本身开始查找)

class A:
    def func(self):
        print('in A')
class B(A):
    def func(self):
        super().func()
        print('in B')
class C(A):
    def func(self):
        super().func()
        print('in C')
class D(B,C):
    def func(self):
        super().func()
        print('in D')

d = D()
d.func()

打印结果:
in A
in C
in B
in D
class A:
    def func(self):
        print('in A')
class B(A):
    def func(self):
        print('in B')
        super().func()
class C(A):
    def func(self):
        print('in C')
        super().func()
class D(B,C):
    def func(self):
        print('in D')
        super().func()

d = D()
d.func()


打印结果:
in D
in B
in C
in A
原文地址:https://www.cnblogs.com/yanyufeng/p/9637617.html