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)
版权声明:本文为博主原创文章,未经博主允许不得转载。