python面向对象的使用方法

class Person:
    # 父类或者基类
    # 如果在类定义中没有指定父类,则默认父类是 object 类。也就是说,object 是所有类的父类,里面定义了一些所有类共有的默认方法,比如:__new__()。
    def __init__(self, name, age, height):
        # 在一个类中可以建立两个构造函数__init()吗?可以,但是写在上面的会被下面的重写,上面的会失效,一般不这样写。
        self.name = name
        self.__age = age
        # ·__xxx:类中的私有成员,只有类对象自己能访问,子类对象也不能访问。
        # (但在类外部可以通过“对象名. _类名__xxx”这种特殊方式访问。Python不存在严格意义的私有成员)
        self.height = height

    def say_age(self):
        print(self.name+'的年龄是:'+str(self.__age))

    def say_name(self):
        print("我是"+self.name)

    def __super(self):
        return '超人'

    def say_height(self):
        print('身高{}'.format(self.height))


class Student(Person):  # 子类或者派生类,继承Person类
    def __init__(self, name, age, score, height):
        self.score = score
        Person.__init__(self, name, age, height)
        # 构造函数中包含调用父类构造函数。根据需要,不是必须。子类并不会自动调用父类的__init__(),我们必须显式的调用它
        # 定义子类时,必须在其构造函数中调用父类的构造函数。调用格式如下:父类名.__init__(self, 参数列表)

    def say_name(self):  # 重写父类的方法
        print("报告老师,我是" + self.name)
        Person.say_name(self)  # 在子类中直接调用父类实例方法(方式1)
        super().say_name()
        # 通过super()在子类中调用父类实例方法(方式2)
        # 在子类中,如果想要获得父类的方法时,我们可以通过 super()来做。super()代表父类的定义,不是父类对象。

    def say_score(self):
        print(self.name+'的分数是:', str(self.score))

    def hobby(self):
        return '爱好是Boxing'

    @staticmethod
    def hobby_static():
        return '爱好是swimming'

    @property  # @property装饰器 可以将一个方法的调用方式变成“属性调用”
    def job(self):
        return '职业是Freedom'


def nationality():
    # 定义一个外部函数。测试为类添加该方法。Python是动态语言,可以动态的为类添加新的方法,或者动态的修改类的已有的方法。
    print('国籍为中国')


def hobby2(self):
    # 定义一个外部函数hobby2,测试替换Person中的hobby方法。注意名称须为hobby**,否则无法识别
    return '爱好是散打'


s1 = Student('孙行者', 18, 100, 186)
s1.say_age()  # 调用父类的实例方法say_age()
s1.say_name()  # 调用子类本身的实例方法
s1.say_score()  # 调用子类本身的实例方法
print(s1.hobby())  # 打印返回值
print(Student.hobby_static())
Student.hobby = hobby2  # 用外部函数hobby2,测试替换Person中的hobby方法
print(s1.hobby())
s1.nationality = nationality  # s1动态新增nationality方法
s1.nationality()  # 新增后调用方法
print(s1.job)  # @property主要用于帮助我们处理属性的读操作、写操作。
print(dir(s1))  # dir(obj)可以获得对象的所有属性、方法
print(s1._Person__age)  # 通过“对象名. _类名__属性名()”在类外部访问私有属性
print(s1._Person__super())  # 通过“对象名. _类名__方法名()”在类外部访问私有方法
print(Student.mro())  # 查看类的继承层次结构

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值