类和实例
在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类如下:
class Person(object):
pass
按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。
创建实例使用 类名+(),类似函数调用的形式创建:
xiaoming = Person()
初始化init
class Person(object):
def __init__(self, name, gender, birth,**kw):
self.name = name
self.gender = gender
self.birth = birth
for k, v in kw.iteritems():
setattr(self,k,v)
#或者
#self.__dict__.update(kw)
xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')
print xiaoming.__dict__
print xiaoming.job
{'gender': 'Male', 'job': 'Student', 'name': 'Xiao Ming', 'birth': '1990-1-1'}
Student
访问限制
Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__)
类属性
class Person(object):
address = 'Earth'
def __init__(self, name):
self.name = name
因为类属性是直接绑定在类上的,所以,访问类属性不需要创建实例,就可以直接访问:
print Person.address
类方法和实例方法
在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。
通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count。
class Person(object):
__count = 0
@classmethod
def how_many(cls):
return cls.__count
def __init__(self, name):
self.name = name
Person.__count = Person.__count + 1
print Person.how_many()
p1 = Person('Bob')
print Person.how_many()
0
1