用关键词 class 定义一个类如果没有指定父类,则默认object类
- class Human(object)
- pass
类属性
- class Human(object):
- taisheng=True
类属性为类的属性,与类绑定,所有该类都有这种属性。
实例属性
- class Human(object):
- def __init__(self,name)
- self.name=name
- human_a=Human("alan")
__init__(self,name)在调用类的时候会被调用,一般用于初始化,self代表实例本身也可以用me代替。
也可以在创建完一个实例之后再去添加实例属性,例如:
- class Human(object):
- pass
- human_a=Human()
- human_a.name="name"
- print(human_a.name)
此段代码也可以给实例human_a附加实例属性name。
类方法
- class Human(object):
- def __init__(self,name):
- self.name=name
- def walk(self):
- print(self.name+"is walking")
- human_a=Human("alan")
- human_a.walk()
运行结果为:alan is walking,此外,值得注意的是,self作为实例本身,必须要作为参数传入函数中,而不能被函数直接使用。
访问控制
以上的例子中name属性是可以被直接访问和修改的,如果想限制外部访问,在属性前面加上__比如__name。如果加上之后想要访问可以使用get借口:
- class Human(object):
- def __init__(self,name):
- self.__name=name
- def walk(self):
- print(self.__name+" is walking")
- def get_name(self):
- return self.__name
- human_a=Human("alan")
- print (human_a.get_name())
此段代码输出了human_a.name,如果需要修改私有的属性,可以使用set接口:
- class Human(object):
- def __init__(self,name):
- self.__name=name
- def walk(self):
- print(self.__name+" is walking")
- def get_name(self):
- return self.__name
- def set_name(self,name):
- self.__name=name
- human_a=Human("alan")
- print (human_a.get_name())
- human_a.set_name("bob")
- print(human_a.get_name())
运行结果分别是"alan" "bob" set函数对human_a.__name进行了修改。其意义就在于可以限制某些属性的修改条件,比如限制name长度小于10:
- class Human(object):
- def __init__(self,name):
- self.__name=name
- def walk(self):
- print(self.__name+" is walking")
- def get_name(self):
- return self.__name
- def set_name(self,name):
- if(len(name)<10)
- self.__name=name
- human_a=Human("alan")
- print (human_a.get_name())
- human_a.set_name("bob")
- print(human_a.get_name())
第9行的if语句就完好的利用了set接口限制了name的长度。
继承与多态
定义了一个类之后,可以定义其子类,子类拥有父类的所有属性,这就是继承。子类也可以拥有自己特有的属性,这就是多态。
- class Man(object):
- def __init(self,name,has_wife)
- super(Man.self).__init__(name)
- self.__has_wife=has_wife
- def smoke(self):
- print(self.get_name()+"is smoke")