笨办法学python45

class Animal(object):
    pass


class Dog(Animal):
    def  __init__(self,name):
        self.name = name


class Cat(Animal):
    def __init__(self,name):
        self.name = name

class Person(Animal):
    def __init__(self,name):
        self.name = name

class Employee(Person):
    def __init__(self,name,salary):
        super(Employee,self).__init__(name)
        self.salary = salary


class Fish(object):
    pass

class Salmon(Fish):
    pass


class Halibut(Fish):
    pass

rover = Dog("Rover")

satan = Cat("satan")

mary = Person("Mary")

mary.pet = satan

frank = Employee("Frank",12000)

frank.pet = rover
flipper = Fish()

crouse = Salmon()

harry = Halibut()

习题45

关于泥鳅和鱼:

class和object是同样的东西,在不同时间名字不同而已。

ex:鱼和泥鳅都是鱼,但泥鳅是比较特殊的鱼。

鱼是class,描述具有同类属性的实例的概括性词汇。泥鳅是新的class,具有一些特定的属性。

ex:小方是一条泥鳅,所以他是泥鳅的一个实例instance(泥鳅也是鱼的一个实例)。你使用它做了道菜于是它就成为了对象object。

小方是泥鳅,泥鳅又属于鱼。所以对象属于类,一个类又属于另一个类。

区分class和object

is-a谈论两者以类的关系相互关联。鱼和泥鳅的关系

has-a两者无共同点,仅是互为参照的情况下。泥鳅和鳃的关系

为什么添加object,有什么含义:

小写的object作为一个类,在创建新类时把他继承下来。

class xxx(object)#python 3 中已经默认加上object

在创建class时会继承object方法,拥有除了自己定义的方法之外的一系列操作对象。

若不加object意味着不继承,则新类只有_doc_,_module_和自己定义的方法。

把class当object使用,创建时不新建方法,然后正常调用??不知道有没有理解错误题目意思

*执行函数时一直提示说name “xxx” is not defined。为什么,难道是占位符过多了。单纯从语法看没问题啊。

还是我调用时出了错。。

“是啥”我感觉两方都是类,一个是基类,一个是新类

“有啥”对应的是类里的方法。

多重继承:一个类可以同时继承多个父类的行为和特征功能。可能造成同一功能多次重写,带来维护问题。

class A(object):

class B(A):

class C(A):   
class D(B, C):

通过 super().init(self)方法时,A 虽然被继承了两次,但__init__()只调用一次:

python如何实现类的继承:对于每一个定义的类,会有一个方法解析顺序列表(MRO)method resolvation order

print(C.mro)得到一个元组。对元组的从左到右依次查找,直到查到待查的属性为止。

当使用super()函数时,python会继续从MRO中的下一个类开始搜索,只要每一个重新定义过的方法(比如init())都使用了super()函数,并且调用了他们一次,那么控制流最终就可以遍历整个MRO列表,并且让每个方法都只被调用一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值