12-Python面向对象

1.类、属性、方法的定义

# 类定义
class Person:

    # 定义基本属性
    name = ''
    age = 0
    height = 1.0
    sex = '不详'
    birth = ''
    # 受保护的,子类无法继承
    _special = ()
    # 定义私有属性
    __weight = 0

    # 构造方法
    def __init__(self,name,age,height,sex,birth,weight):
        self.name = name
        self.age = age
        self.height = height
        self.sex = sex
        self.birth = birth
        self.__weight = weight

    # 类的方法
    def __repr__(self):
        return "{ name:%s,age:%d,height:%.2f,sex:%s,birth:%s,weight:%.2f }"\
               %(self.name,self.age,self.height,self.sex,self.birth,self.__weight)

person = Person('CaiBird',22,1.80,'男','1994.10.13',123)
print(repr(person))

2.类的专有方法

# __init__      : 构造函数,在生成对象时调用
# __del__       : 析构函数,释放对象时使用
# __repr__      : 打印,转换
# __setitem__   : 按照索引赋值
# __getitem__   : 按照索引获取值
# __len__       : 获得长度
# __cmp__       : 比较运算
# __call__      : 函数调用
# __add__       : 加运算
# __sub__       : 减运算
# __mul__       : 乘运算
# __div__       : 除运算
# __mod__       : 求余运算
# __pow__       : 乘方

3.继承

# 继承
class Student(Person) :

    # 定义自己的属性
    studentNo = 0

    # 构造方法
    def __init__(self,studentNo,name,age,height,sex,birth,weight):
        Person.__init__(self,name,age,height,sex,birth,weight)
        self.studentNo = studentNo

    # 重写父类方法
    def __repr__(self):
        # return Person.personMessage(self).replace(' }',',studentNo:%s }'%(self.studentNo))
        return Person.__repr__(self)[:-2] + ',studentNo:%s }'%(self.studentNo)

stu = Student('1234567890','CaiBird',22,1.80,'男','1994.10.13',123)
print(repr(stu))

4.多重继承

# 多重继承
class CoderMonkey(Person):
    skill = ''

    def __init__(self,name,age,height,sex,birth,weight,skill):
        # super(CoderMonkey,self).__init__(name, age, height, sex, birth, weight)
        Person.__init__(self, name, age, height, sex, birth, weight)
        self.skill = skill

    # 加班方法
    def workOverTime(self):
        return '我叫%s,我是个程序员,我会加班!'%(self.name)

class SingleDog(Person):
    food = ''

    def __init__(self,name,age,height,sex,birth,weight,food):
        # super(SingleDog,self).__init__(name, age, height, sex, birth, weight)
        Person.__init__(self, name, age, height, sex, birth, weight)
        self.food = food

    # 受虐方法
    def abused(self):
        return '我叫%s,我是个单身狗,天天被虐!'%(self.name)

class Me(CoderMonkey,SingleDog):
    identifier = 'Hello Python'

    def __init__(self,name,age,height,sex,birth,weight,skill,food):
        # 思考:使用super()和父类类名的区别、联系
        Person.__init__(self,name, age, height, sex, birth, weight)

        self.skill = skill
        self.food = food

    # 重写父类方法
    def __repr__(self):
        # return Person.personMessage(self).replace(' }',',studentNo:%s }'%(self.studentNo))
        return Person.__repr__(self)[:-2] + ',skill:%s,food:%s }' % (self.skill,self.food)

# 方法名相同,先调用括号排在前面的父类方法
me = Me('CaiBird',22,1.80,'男','1994.10.13',123,'狗粮','加班')
print('Me:%s'%(repr(me)))
print(me.workOverTime())
print(me.abused())

5.super()和父类类名

    ①、 super并不是一个函数,是一个类名,形如super(B, self)事实上调用了super类的初始化函数,
      产生了一个super对象

    ②、Python的多继承类是通过mro的方式来保证各个父类的函数被逐一调用,而且保证每个父类函数
      只调用一次(如果每个类都使用super)

    ③、混用super类和非绑定的函数是一个危险行为,这可能导致应该调用的父类函数没有调用或者一
      个父类函数被调用多次

转载于:https://my.oschina.net/CoderW/blog/995496

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值