面向对象的特性
用类管理数据
1.多态 参数类型用基类声明,执行的时候会根据传入的对象,去执行相应的方法,具有不同的效果。
爷爷类A: print_name **+name
父亲类B:print_name ***+name
儿子类C: print_name ****+name
func(A xxx):
xxx.print_name() //xxx是哪个类,就会调用哪个类的print_name方法
例:class A:
def print_name(self):
s="**"+A.__name__
print(s)
class B(A):
def print_name(self):
s="***"+B.__name__
print(s)
class C(B):
def print_name(self):
s="****"+C.__name__
print(s)
def func (m):
m.print_name()
a=A()
b=B()
c=C()
func(a)
func(b)
func(c)
2.继承
不能继承私有属性和方法(如果父类有私有的数据继承时会报错误)
#子类没有__init_-构造方法,自动调用父类的构造方法
#子类有__init__构造方法,不会自动调用父类的构造方法,此时如果父类有构造方法,子类必须显示调用父类的构造方法
class Father(object):
#__age=1
def __init__(self,name):父类的构造方法
self.name=name
#Father.__age+=1
def get_name(self):
return self.name
def set_name(self,name):
self.name=name
def get_father_name(self):
return self.nameclass Son(Father):
def __init__(self,name,nation):
Father.__init__(self,name) 调用父类的构造方法
self.nation=nation
def get_nation(self):
return self.nation
def set_name(self,name): 重写父类的方法
if len(name)>10:
return
else:
self.name=name
def get_father_name(self):
super(Son,self).get_father_name() //super必须是新类才可以,python2新类必须包括(object)
#Father.get_father_name(self) //调用父类方法的另外一个方式
s=Son("zz","满族")
s.set_name("12345679081") name长度超过10时不修改
print(s.get_name())
print(s.get_nation())
#print(s.__age)
3.封装
不支持同名函数,参数个数不相同的情况
重写:
class Person():
def print_info(self):
print("*************")
class ChinesePerson(Person):
def print_info(self):
print("________")
p= ChinesePerson()
p.print_info()
p=Person()
p.print_info()
浙公网安备 33010602011771号