Learning Python(2)---面向对象

类和实例

定义class

Class Student:

    name = ''
    score = 0

    def print_score(self):
        print(self.name, self.score)
        

构造实例

S = Student
S.print_score()

属性和方法

通过定义一个特殊的__init__方法,静态绑定属性

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

    def print_score(self):
        print(self.name, self.score)

#创建学生对象
tom = Student('Tom', '59')
tom.print_score()

实例动态绑定属性和方法

动态给实例绑定属性

s.name = “Tom” 

动态给实例绑定方法

定义一个方法

Def  set_age(self, age):
    self.age = age

From types import MethodType
s.set_age = MethodType(set_age, s) 
S.set_age(25)

给一个实例绑定的方法,对另一个实例是不起作用的,为了使对所有的实例都起作用,需要在class定义时绑定静态方法。

__slots__变量

__slots__变量定义于class中,用于限制该class的实例能动态添加的属性

class Student(object):
    __slots__ = ('name','age') 

__slots__变量的作用范围只针对当前类,不针对当前类的子类。

访问限制

变量名如果以__开头,就变成了一个私有变量,只有内部可以访问

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

如果强制从外部赋值的话,会新增一个__name变量,该变量与class内部的__name变量不是同一个。

 

继承和多态

继承

class Animal(object): //动物  
    pass
class Mammal(Animal): //哺乳动物    
    pass
class Bird(Animal): //鸟类   
    pass

多重继承

通过多重继承,一个子类就可以同时获得多个父类的所有功能。

class Animal(object): //动物    
    pass
class Mammal(Animal): //哺乳动物   
    pass
class Bird(Animal): //鸟类  
    pass


class Runnable(object)://会跑的 
    def run(self):
        print('Running...')
class Flyable(object): //会飞的
    def fly(self):
        print('Flying...')
class Dog(Mammal, Runnable):   
    pass

定制类

python中,形如__xxx__的表示变量或者函数具有特殊用途。

下文几种常用的定制方法:

__main__

__init__

__str__

__iter__

__getitem__

__getattr__

__call__

 

 

 

你可能感兴趣的:(Python)