python-day6面向对象、类的继承

@面向对象三大特性:封装encapsulation、继承inheritance、多态(一个接口,多个实现)polymorphism。

@面向对象介绍http://www.cnblogs.com/alex3714/articles/5188179.html

@编程原则需要考虑:重复代码比较第一,写的代码会经常需要变更。

@如果只是字典搭配函数进行程序设计,会出现绕过控制函数直接更改字典值的漏洞。

@类的实例化:

r1 = Role('Alex','police','AK47’) #生成一个角色

d.sayhi()#执行函数、方法、功能、动态属性。

以下为解释

r1=Role(r1, 'Alex','police','AK47’)

r1=Role.__init__()à return x2314512o213sxo..

@self.name=name#实例变量(静态属性)。

@__init__()上面再加变量就是类变量,可以通过类和实例进行调用。

@执行时先找实例变量,如果没有就继续找类变量。

@实例化后可以增加属性,如:r1.bb=100;也可以删除属性 del r1.name

@类变量的更改?

@类变量的用途:省内存。

@@@析构函数:在实例释放、销毁的时候执行的,通常做一些收尾工作,比如做一些关闭数据连接、

@创建def __init__(self):

程序退出时,执行;del 实例时执行。

@python自动回收机制,实质就是如果没有变量名,就清理掉。

@ self.name改成self.__name,就成了私有属性。

在实例中无法直接调取,可以再建一个函数,用来调取私有属性,再通过调取函数来调取私有属性。

@5-10、11讲的xml看没看?

@继承

@class man(Farther):

def __init__(self,name,age,自己的属性)

Farther.__init__(self,name,age)

m1=man(xxx,xxx)

调用父类属性,函数里通过Farther.函数

可以用super(man,self).__init__(父类属性),就是可以随时调用父类的属性。

@新式类

class people(object):#object叫基类

新旧类的区别,主要体现在多继承的顺序问题,只继承第一个父类的__init__,这个策略叫广度优先。Python3全是广度优先,python2里面经典类是深度优先,新式类是广度优先。

A

B

C

D

@多继承

继承.py里面的man继承people和relation!!!

执行顺序从左到右

@http://www.cnblogs.com/alex3714/articles/5188179.html继承示例

@@@多态

一种接口,多种形态。作用:重复利用接口调用。http://www.cnblogs.com/alex3714/articles/5188179.html

@多态实例(python默认没有多态功能,通过这种形式可实现)

class Animal:

    def __init__(self, name):  # Constructor of the class

        self.name = name

    def talk(self):  # Abstract method, defined by convention only

        pass #raise NotImplementedError("Subclass must implement abstract method")

    @staticmethod#静态方法,跟类没关系,名义上是类的函数(没用过)

    def animal_talk(obj):

        obj.talk()

class Cat(Animal):

    def talk(self):

        print('Meow!')

class Dog(Animal):

    def talk(self):

        print('Woof! Woof!')

d = Dog("陈荣华")

c = Cat("徐良伟")

Animal.animal_talk(c)

Animal.animal_talk(d)

猜你喜欢

转载自www.cnblogs.com/AKmendo/p/9574581.html