一、python3新式类
class newstyle(object):
pass
继承自object类,有更多的功能。
二、类属性定义
1.定义属性两种方法
(1)直接定义
hobby = 'Play Computer'
(2)使用构造函数定义
def __init__(self,attr1,attr2)
2.公有属性、私有属性、保护属性(public、private、protect)
Python中没有私有属性这种属性保护机制,只能通过代码规范来实现。
在属性前面加下划线_age,表示私有属性。
三、类方法定义
1.函数和方法
函数:程序中的代码块,直接用函数名调用
方法:是类的一部分,必须与类结合,通过类或者对象调用(python中方法其实也是类的一个属性)
2. 方法的访问控制
与类属性一样,python中方法也没有访问控制,只能通过代码规范在方法前加下划线。
3.方法注解
(1)@classmethod注解:调用的时候用类名,而不是对象
(2)@property注解:像访问属性一样调用方法
class Programer(object):
hobby = 'Play Computer'
def __init__(self,name,age,weight):
self.name = name
self._age = age
self.__weight = weight
@classmethod
def get_hobby(cls):
return cls.hobby
@property
def get_weight(self):
return self.__weight
def self_introduction(self):
print ('My Name is %s \n I am %s years old\n' % (self.name , self._age))
if __name__=='__main__':
programer = Programer('Albert',25,80)
print (dir(programer))
print (Programer.get_hobby()) #类
print (programer.get_weight) #对象
programer.self_introduction()
['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_hobby', 'get_weight', 'hobby', 'name', 'self_introduction']
Play Computer
80
My Name is Albert I am 25 years old
四、类的继承
1.格式:
#创建newExample类继承父类BaseExample
class newExample(BaseExample):
pass
2. 子类会继承父类的属性和方法;也可以自己定义,覆盖父类的属性和方法
3. 子类调用父类的方法
(1)用super()调用父类的方法(推荐)
class base(object):
def run(self,arg):
pass
class example(base):
def fly(self,arg):
super(example,self).run(arg)
(2)用父类名调用父类方法
class base(object):
def run(self,arg):
pass
class example(base):
def fly(self,arg):
base.run(arg)
4. 多继承(不常用)
class Base1(object):
pass
class Base2(object):
pass
class Base3(object):
pass
class newExample( Base1 , Base2 , Base3 ):
pass
5. 实例
class Programer(object):
hobby = 'Play Computer'
def __init__(self,name,age,weight):
self.name = name
self._age = age
self.__weight = weight
@classmethod
def get_hobby(cls):
return cls.hobby
@property
def get_weight(self):
return self.__weight
def self_introduction(self):
print ('My Name is %s I am %s years old\n' % (self.name , self._age))
class pyProgramer(Programer):
def __init__(self, name, age, weight, language):
super(pyProgramer, self).__init__(name, age, weight)
self.language = language
if __name__=='__main__':
programer = pyProgramer('Albert',25,80,'Python')
print (dir(programer))
print (programer.__dict__)
print (type(programer))
print (isinstance(programer, Programer))
['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_hobby', 'get_weight', 'hobby', 'language', 'name', 'self_introduction']
{'name': 'Albert', '_age': 25, '_Programer__weight': 80, 'language': 'Python'}
<class '__main__.pyProgramer'>
True
五、类的多态
1. 要素:继承,重写
2. 实例
class Programer(object):
hobby = 'Play Computer'
def __init__(self,name,age,weight):
self.name = name
self._age = age
self.__weight = weight
@classmethod
def get_hobby(cls):
return cls.hobby
@property
def get_weight(self):
return self.__weight
def self_introduction(self):
print ('My Name is %s I am %s years old\n' % (self.name , self._age))
class pyProgramer(Programer):
def __init__(self, name, age, weight, language):
super(pyProgramer, self).__init__(name, age, weight)
self.language = language
def self_introduction(self):
print('My Name is %s My favorite language is %s' %(self.name, self.language))
def introduce(programer):
if isinstance(programer, Programer):
programer.self_introduction()
if __name__=='__main__':
programer = Programer('Albert',25,80)
pyprogramer = pyProgramer('Tim',25,80,'Python')
introduce(programer)
introduce(pyprogramer)
My Name is Albert I am 25 years old
My Name is Tim My favorite language is Python