面向对象的特性

用类管理数据

 

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()

posted @ 2019-03-30 23:09  期待me  阅读(91)  评论(0)    收藏  举报