Python类

定义类

与其他语言一样,Python中定义类也是用class关键字来定义。

class Student(Object):
      def __init(self,x1,x2,...):
          self._x1 = x1
      self._x2 = x2

从上述定义可以知道,Python中不用明确定义变量成员。

访问限制

Python中,变量名类似_xxxx_的为特殊变量,可以直接访问;类似xxx的变量为public,也可以直接访问;而Python中的private变量名如__xxxx所示。

继承与多态

继承

class Animal(object):
      def run(self):
          print('Animal is running...')
class Dog(Animal):
      pass
class Cat(Animal):
      pass

如上所示,Animal为基类/夫类,Dog,Cat为继承Animal的子类。
继承可以使子类继承夫类的所有功能,如例子中Dog,Cat继承了Animal的run()方法。

当我们运行程序时:

dog = Dog()
dog.run()

cat = Cat()
cat.run()

明显这Dog,Cat的run()方法功能是一样的都是继承夫类,但子类往往也拥有不同的属性/特点,因此需要在子类中重写run()方法,该行为成为覆盖。

class Dog(Animal):
      def run(self):
          print('Dog is running...')

class Cat(Animal):
      def run(self):
          print('Cat is running...')

多态

def run_twice(animal):
    animal.run()
    animal.run()


cat = Cat()
dog = Dog()

run_twice(cat)
run_twice(dog)

根据上述例子,由于多态性,dog即是Dog又是Animal,因此无需改写run_twice()方法,就可以正常运行。

获取对象信息

判断对象类型,使用type()函数。
对于存在继承关系的class来说,使用isinstance()函数。
获取对象的所有属性和方法,可使用dir()函数。
hasattr(),getattr(),setattr()

dog = Dog()
print(hasattr(dog,'x'))

setattr(dog,'x',12)

print(getattr(dog,'x')) #假如不存在该属性,会抛出错误,getattr(dog,'x',404),没有返回默认值

类属性

由前面我们知道,在Python中定义类时不需要明确定义变量成员,由类实例化的实例可以任意绑定属性,但我们要定义类属性也可以。但是我们需要知道的是一个实例,实例属性的优先级高于类属性,因此当同名时,返回的是实例属性值。

class Student(object):
      name = 'Student'

s = Student()
print(s.name)
print(Student.name)
s.name = 'Peter'
print(s.name)
print(Student.name)

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-08-28 16:31  mlhy  阅读(162)  评论(0编辑  收藏  举报