Python 面向对象编程

2017-09-05  本文已影响0人  竞技等级几点叫你你呢

class

python 是动态语言,对于每一个实例,都可以直接给他们的属性赋值。

class Person():
    pass


xiaohong = Person()
xiaohong.name = 'xiaoming'
xiaohong.age = 20

xiaoming = Person()
xiaoming.size = 50

print(xiaoming.size)
print(xiaohong)

初始化实例属性

在定义类时,可以为Person类添加一个特殊的_init_()方法,当创建实例时,_init_()方法被自动调用,每个实例都统一拥有属性。

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age


xiaohong = Person('xiaoming',20)

print(xiaohong.name)

访问限制

__ 双下划线开头的属性不能被外部访问

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
        self.__class = 1


__class 属性不能直接被外部访问
以'__xx__' 形式存在的属性,可以被外部访问,在python中为特殊属性。

类属性

class Person(object):
    address = 'Earth'
    def __init__(self, name):
        self.name = name

可以直接根据类访问,不需要实例化
Person.address
当然实例化的对象也可以访问

实例属性和类属性

优先级  :   类属性 > 实例属性

实例方法

和java 类中定义方法类似

@classmethod 类方法

在class中定义的全是实例方法,通过标记一个 @classmethod,该方法将绑定到类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls

继承

super(Student, self)将返回当前类继承的父类,

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


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


xiaobai = Student(1, 1)


print(isinstance(xiaobai,Person))
print(isinstance(xiaobai,Student))

多态

多重继承

class A(object):
    def __init__(self, a):
        print 'init A...'
        self.a = a

class B(A):
    def __init__(self, a):
        super(B, self).__init__(a)
        print 'init B...'

class C(A):
    def __init__(self, a):
        super(C, self).__init__(a)
        print 'init C...'

#多重继承
class D(B, C):
    def __init__(self, a):
        super(D, self).__init__(a)
        print 'init D...'
上一篇下一篇

猜你喜欢

热点阅读