美文网首页
Python - 类(未完待续)

Python - 类(未完待续)

作者: Cytosine | 来源:发表于2017-10-05 23:03 被阅读0次

编写类

class Person:
    """
    Class to represent a person
    """
    def __init__(self): # 构造函数
        self.name = ''
        self.age = -1

显示对象

class Person:
    """
    Class to represent a person
    """
    def __init__(self): # 构造函数
        self.name = ''
        self.age = -1

    def display(self): # 打印对象内容
        print('Person(name={0}, age={1})'.format(self.name, self.age))

if __name__ == '__main__':
    p = Person()
    p.name = 'Cytosine'
    p.age = 16
    p.display()

__str__ 与 __repr__

class Person:
    """
    Class to represent a person
    """
    def __init__(self): # 构造函数
        self.name = ''
        self.age = -1

    def display(self): # 打印对象内容
        print('display(): Person(name={0}, age={1})'.format(self.name, self.age))

    def __str__(self): # 生成对象的字符串表示, str(p)
        return 'Person(name={0}, age={1})'.format(self.name, self.age)

    def __repr__(self):
        return str(self)


if __name__ == '__main__':
    p = Person()
    p.name = 'Cytosine'
    p.age = 16
    p.display()
    print(str(p))
    print(p)

对象初始化

class Person:
    """
    Class to represent a person
    """
    def __init__(self, name = '', age = -1): # 构造函数
        self.name = name
        self.age = age

    def display(self): # 打印对象内容
        print('display(): Person(name={0}, age={1})'.format(self.name, self.age))

    def __str__(self): # 生成对象的字符串表示, str(p)
        return 'Person(name={0}, age={1})'.format(self.name, self.age)

    def __repr__(self):
        return str(self)



if __name__ == '__main__':
    p1 = Person()
    print(str(p1))

    p2 = Person('Cytosine', 16)
    print(str(p2))

虽然给__init__中的参数指定默认值很容易,但不建议这么做。空的Person对象没有真正意义上的姓名和年龄,在之后处理Person对象的代码中,要始终检查这一点。而始终检查这些特殊情况,很快会成为一种负担,而且也很容易被忘记。

setter() 与 特性装饰器

class Person:
    """
    Class to represent a person
    """
    def __init__(self, name = '', age = -1): # 构造函数
        self.name = name
        self.setAge(age)

    def display(self): # 打印对象内容
        print('display(): Person(name={0}, age={1})'.format(self.name, self.age))

    def __str__(self): # 生成对象的字符串表示, str(p)
        return 'Person(name={0}, age={1})'.format(self.name, self.age)

    def __repr__(self):
        return str(self)

    def setAge(self, age):
        if 0 < age < 150:
            self.age = age



if __name__ == '__main__':
    p1 = Person('Cytosine', 16)
    print(str(p1))
    p1.setAge(17)
    print(str(p1))

特性装饰器

输入p.setAge(30)比输入p.age = 30更繁琐,故而有 特性装饰器

class Person:
    """
    Class to represent a person
    """
    def __init__(self, name = '', age = -1): # 构造函数
        self._name = name
        self._age = age

    @property
    def age(self):
        return self._age

    @age.setter
    def setAge(self, age):
        if 0 < age < 150:
            self._age = age

    def display(self): # 打印对象内容
        print(self)

    def __str__(self): # 生成对象的字符串表示, str(p)
        return 'Person(name={0}, age={1})'.format(self._name, self._age)

    def __repr__(self):
        return str(self)


if __name__ == '__main__':
    p = Person('Cytosine', 16)
    p.display()
    p.age = -1
    p.display()

私有变量

p._age = -3

依旧可以修改person.age的值。
在变量名开头包含两个下划线__则表明该变量是私有变量,在Class Person外不能被访问。
而要直接访问Person.__age需要在Person前加一个下划线,如:

_Person.__age = 1

继承

class Player:
    def __init__(self, name):
        self._name = name
        self._score = 0

    def reset(self):
        self._score = 0

    def increase_score(self):
        self._score += 1

    def get_name(self):
        return self._name

    def __str__(self):
        return 'name={0}, score={1}'.format(self._name, self._score)

    def __repr__(self):
        return str(self)

class Human(Player): # Human 继承自 Player
    pass # Python中表示什么都不做

if __name__ == '__main__':
    p = Player('Cytosine')
    print(p)

    h = Human('Lovegood')
    print(h)
    h.increase_score()
    print(h)

重写方法

class Player:
    def __init__(self, name):
        self._name = name
        self._score = 0

    def reset(self):
        self._score = 0

    def increase_score(self):
        self._score += 1

    def get_name(self):
        return self._name

    def __str__(self):
        return 'Player: name={0}, score={1}'.format(self._name, self._score)

    def __repr__(self):
        return str(self)

class Human(Player): # Human 继承自 Player
    # pass # Python中表示什么都不做
    def __str__(self):
        return 'Human: name={0}, score={1}'.format(self._name, self._score)

    def __repr__(self):
        return str(self)

if __name__ == '__main__':
    p = Player('Cytosine')
    print(p)

    h = Human('Lovegood')
    print(h)
    h.increase_score()
    print(h)

多态

相关文章

网友评论

      本文标题:Python - 类(未完待续)

      本文链接:https://www.haomeiwen.com/subject/suaqyxtx.html