类定义
class Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
def print_score(self):
print '%s: %s' % (self.__name, self.__score)
说明:init为构造函数,第一个参数为self为函数本身。
类成员以双下划线开头,说明为private访问限制的,类实例不能直接访问。(一个下划线开头的实例变量名,外部是可以访问的。其实双下划线的变量,python将其改名为"类名变量名",类实例可以通过如上标识访问,但是、总之访问这些变量是不好的。)
类继承
class Animal(object):
def run(self):
print 'Animal is running...'
class Dog(Animal):
pass
class Cat(Animal):
def run(self): #方法的overwrite
print 'Dog is running...'
dog = Dog()
dog.run()
cat = Cat()
cat.run()
#多态--父类是参数
def run_twice(animal):
animal.run()
animal.run()
#如下两个都可以正常运行
run_twice(Animal())
run_twice(Dog())
类继续可以共用父类公共方法,可重写父类的不适宜方法;
多态在类作为参数时,可以接收父类型的参数,把子类视作父类型参数进行调用。
type() 方法可获取对象类型
import types
types模块中有相应类型定义
>>> type('abc')==types.StringType
True
>>> type(u'abc')==types.UnicodeType
True
>>> type([])==types.ListType
True
>>> type(str)==types.TypeType
True
有一种类型就叫TypeType,所有类型本身的类型就是TypeType
isinstance() 判断变量是否为某类实例
dir() 获得一个对象的所有属性和方法
len() 返回对象长度(自动去调用该对象的len()方法)
>>> class MyObject(object):
... def __init__(self):
... self.x = 9
... def power(self):
... return self.x * self.x
...
>>> obj = MyObject()
>>> hasattr(obj, 'x') # 有属性'x'吗?
True
>>> hasattr(obj, 'y') # 有属性'y'吗?
False
>>> setattr(obj, 'y', 19) # 设置一个属性'y'
>>> hasattr(obj, 'y') # 有属性'y'吗?
True
>>> getattr(obj, 'y') # 获取属性'y'
19
>>> getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404
404
#如上也可以应用于方法