class Animal():
    def __init__(self, age):
        self.age = age

    def get_age(self):
        return self.age

    def set_name(self, name):
        self.name = name

    def get_name(self):
        try:
            return self.name
        except:
            print("Set name first!")

    def __str__(self):
        return self.name + ":" + str(self.age) 

    __repr__ = __str__

>>> a = Animal(3)
>>> a.get_name()
Set name first!
>>> a.set_name("Jimmy")
>>> a.get_name()
'Jimmy'
>>> a
Jimmy:3


#之所以说Python 不够严谨,是因为可以完全绕过类来通过属性来赋值
>>> a.age = 5
>>> a.get_age()
5
#默认状态下age应该输入int类型,但是在这种状态可以赋值str型,这样会导致程序内部的严重错误
>>> a.age = "Jimmy"
>>> a.get_age()
'Jimmy'

#类的继承

class Cat(Animal):
    def speak(self):
        print("~meow~")
        
    def __str__(self):
        try:
            return self.name + " is a " + str(self.age) + "-years old cat!"
        except:
            return "A meow has no name yet!"
    
    __repr__ = __str__

>>> c = Cat(5)
>>> c
A meow has no name yet!
>>> c.get_name()
Set name first!
>>> c.set_name("Tiny")
>>> c
Tiny is a 5-years old cat!


import random as r

class Animal():
    def __init__(self, age):
        self.age = age

    def get_age(self):
        return self.age

    def set_name(self, name):
        self.name = name

    def get_name(self):
        try:
            return self.name
        except:
            print("Set name first!")

    def __str__(self):
        return self.name + "age:" + str(self.age) 

    __repr__ = __str__

class Cat(Animal):
    def speak(self):
        print("~meow~")
        
    def __str__(self):
        try:
            return self.name + " is a " + str(self.age) + "-years old cat!"
        except:
            return "A meow has no name yet!"
    
    __repr__ = __str__


class Human(Animal):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.friends = []

    def get_friends(self):
        return self.friends

    def add_friends(self, other):
        if other.name not in self.friends:
            self.friends.append(other.name)
    def speak(self):
        print("Hello world! %s" %self.friends[0])

    def age_diff(self, other):
        diff = abs(self.age - other.age)
        print("They have",diff,"years difference.")

    def __str__(self):
        return "Human " + self.name + "age:" + str(self.age) + " have friends " + str(self.friends)

    __repr__ = __str__


class Student(Human):
    def __init__(self, name, age, major = None):
         self.name = name
         self.age = age
         self.major = major

    def change_major(self, major):
        self.major = major
        return self.major

    def speak(self):
        R = r.random()
        if R < 0.25:
            return "Zzzzz..."
        elif  0.25 <= R < 0.5:
            return "I hunger..."#这里要用return,如果用print()就不能在print(a.speak())中正常显示了
        elif 0.5 <= R < 0.75:
            return "Maybe I need to study..."
        else:
            return "Go jerk it out!!!"

    def __str__(self):
        return "Student : " + self.name + " age : " + str(self.age) + "==>Major : " + str(self.major)

    __repr__ = __str__


>>> a = Student("Jimmy",666, "PreMED")
>>> a
Student : Jimmy age : 666==>Major : PreMED
>>> print(a.get_name(), "say:", str(a.speak()))
Jimmy say: Go jerk it out!!!


class Rabbit(Animal):
    tag = 1

    def __init__(self, age, parent1=None, parent2=None):
        Animal.__init__(self, age)
        self.parent1 = parent1
        self.parent2 = parent2
        self.rid = Rabbit.tag
        Rabbit.tag += 1

    def get_rid(self):
        return str(self.rid).zfill(3)

    def get_parent1(self):
        return self.parent1

    def get_parent2(self):
        return self.parent2

    def __add__(self, other):
        return Rabbit(0, self, other)#定义父母和子女关系,同时定义年龄

    def __eq__(self, other):
        parents_same = self.parent1.rid == other.parent1.rid \
                       and self.parent2.rid == other.parent2.rid
        parents_opposite = self.parent1.rid == other.parent2.rid \
                           and self.parent2.rid == other.parent1.rid
        return parents_same or parents_opposite

    def __str__(self):
        return "rabbit:" + self.name +" " + self.get_rid()

    __repr__ = __str__

r1 = Rabbit(1)
r1.set_name("Tu_1")
r2 = Rabbit(2)
r2.set_name("Zhu_1")
r3 = r1 + r2
r3.set_name("Er_1")
print(r1)
print(r2)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容