面向对象2

1.类的成员:变量,方法,属性

  1.变量:

  实例变量(字段):

    公有实例变量:

    

1 class Foo:
2     def __init__(self,name):
3         self.name = name#公有实例变量
4     
5     def func(self):
6         print(self.name)
7 
8 obj = Foo('a')
9 obj.func()

    私有实例变量:

1 class Foo:
2     def __init__(self):
3         pass
4     
5     def __func(self):#私有实例变量
6         print("私有实例变量")
7 
8 obj = Foo()
9 obj.func()#会报错

  类变量(静态字段):

    公有类变量:

 1 class Foo:
 2     a = 1#公有类变量
 3     def __init__(self):
 4         pass
 5     
 6     def func(self):
 7         print(self.a)
 8 
 9 obj = Foo()
10 obj.func()

    私有类变量:

 1 class Foo:
 2     __a = 1#私有类变量
 3     def __init__(self):
 4         pass
 5 
 6     def func(self):
 7         print(self.a)#会报错
 8 
 9 obj = Foo()
10 obj.func()

总结:

  1.公有:

    实例变量(字段)访问时,使用对象访问,即obj.name

    类变量(静态字段)访问时,使用类方法,即:Foo.name

  2.私有:

    实例变量(字段)访问时,外部无法直接调用私有实例变量,必须从内部方法调用私有成员

    类变量(静态字段)访问时,外部无法直接调用私有类变量,必须从内部调用私有成员

    如果是子类继承父类,也必须先在父类中调用私有成员,子类才能调用

  2.方法:实例方法,静态方法,类方法

    1.实例方法

      

1 class Foo:
2     def __init__(self,name)
3         self.name = name
4     #实例方法
5     def func(self):
6         print(self.name)
7 
8 obj = Foo("abc")
9 obj.func()

 

    2.静态方法

 1 class Foo:
 2     def __init__(self,name):
 3         self.name = name
 4     #静态方法,如果方法无需使用对象中封装的值,就可以使用静态方法
 5 
 6     @staticmethod
 7     def display(a1,a2):
 8         return a1+a2
 9 
10 Foo.display(1,2)

  

    3.类方法

1 class Foo:
2     #类方法,cls是类
3     @classmethod
4     def show(cls,x1,x2):
5         print(cls,x1,x2)
6 
7     #执行类方法
8 Foo.show(1,2)

 

总结:

  实例方法至少有一个参数(默认是self),第一个参数必须是实例对象

  静态方法可以没有参数,也可以有多个参数,无需使用对象中封装的值,有返回值

  类方法至少有一个参数(默认为cls),第一个参数必须是类(cls)

    

posted @ 2018-09-01 12:53  小鸽鸽OvO  阅读(142)  评论(0编辑  收藏  举报