Python 6、类继承

子类与父类是is关系
s 是 Student
s 是 Person
has关系,包含


继承一个类:

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

定义Student类,加上score属性:

class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)    #有意思
        self.score = score
#函数super(Student, self)将返回当前类继承的父类,即Person
#注意self已在Super中传入了,在__init__()中将隐式传递,不用再写

判断类型:
函数isinstance()可以判断一个变量的类型,既可以用在Python内置数据类型如 str, list, dict等,也可以用在我们自定义的类中。
它们本质上都是数据类型。
子类实例是父类的实例,父类实例不是子类的实例


多态:
动态语言(如Python)与静态语言(如Java)最大的差别之一,动态语言调用实例方法不检查类型,只要方法存在,参数正确就可以调用。
一个父类与两个子类都定义了方法whoAmI(),实例 s 调用对应的方法——多态


多重继承:

class D(B, C):
    def __init__(self, a):
        super(D, self).__init__(a)
        print 'init D...'
#也有人说这样不对,应该如下写:
class D(B, C):
    def __init__(self, b, c):
        B.__init__(self, b)
        C.__init__(self, c)
#一看,第一种写法确实不太对哦

获取对象信息:
拿到一个变量除了用isinstance() 判断它是否是某种类型的实例外,
还有没有别的方法可以获取更多的信息?

*首先,用type() 函数是可以获取变量的类型的。

type(123)
==><type 'int'>

*其次,可用dir() 函数获取变量所有的属性

dir(123)
s = Student('Bob')
dir(s)
#dir返回的属性是字符串列表,如果已知一个属性名称,要获取设置对象的树形,就需要用 getattr() 和 setattr() 函数
getattr(s, 'name') #获取name属性
setattr(s, 'name', 'Adam') #设置
getattr(s, 'age') #不存在,报错
class Student(Person):
    def __init__(self, name, **kw):
        self.name = name
        for k,v in kw.iteritems():
            setattr(s, k, v)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值