python笔记——类

简单的类

在实际应用场景中,许多对象可能存在共性,于是可以将他们的共性给封装为一个类,这样在调用时就不用每次都重新定义。

# 定义一个类 ————人(人都有姓名、年龄)
class person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    
    def get_name(self):
        print('The guy names %s'%self.name)
        
    def get_age(self):
        print("The guy's age is %s"%self.age)

上述定义了一个类————person,且在其中给定了共性:姓名、年龄,那么当需要定义一个这样的“人”时,就可以直接调用这个类:

# 通过person类来定义一个人——jay
jay = person('jay',18)
jay.get_name()
jay.get_age()

通过person即可定义,通过定义的方法可获取jay的姓名和年龄。

The guy names jay
The guy's age is 18

需要注意的是,在定义类的方法(函数)时,不要使用与类本身属性名称相同的函数名(比如存在属性name,则不要定义def name(self)

父类和子类(继承)

由于简单的类并不能应用于所有的场景,每个人除了共性还有自己本身的特点,比如每个人的工作都不同。于是可以在共性的基础上继续细分,添加不同的特征来表示不同的类。

于是就有了基础的类:person和在此基础上建立的worker类,worker类也有nameage属性,于是就可以通过继承person类的方式进行,不需要再重新定义。

下面在上述person类的基础上添加“工作(job)”特征。

# 父类与子类
# 父类——person
class person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
        
    def get_name(self):
        print("The guy names %s"%self.name)
    
    def get_age(self):
        print("The guy's age is %s"%self.age)
        
# 定义子类——worker
# 子类继承自父类person
# worker是人,有名字和年龄
class worker(person):
    def __init__(self,name,age,job):
        # 继承父类的属性定义
        # 写法1
        # 父类.__init__(self,参数)
        person.__init__(self,name,age)
        # 写法2
        # super(子类,self).__init__(参数)
#        super(worker,self).__init__(name,age)
        # 写法3——仅限用于Python3
        # super().__init__(name,age)
#        super().__init__(name,age)
        # 定义子类本身的新属性
        self.job = job
        
    # 定义子类本身的方法(函数)
    def get_job(self):
        print("The guy is a %s"%self.job)

于是可以定义一个新的worker对象,在具有name和age属性的同时还具有job属性。

jay = worker('jay',18,'teacher')
# 获取属性
print(jay.name)
# 调用父类的函数
jay.get_name()
# 输出子类的新属性
print(jay.job)
# 输出子类的新方法
jay.get_job()

输出结果:

jay
The guy names jay
teacher
The guy is a teacher

继承时覆盖父类的方法

1、父类.方法(self,参数)

2、super(子类,self).方法(参数)

3、super().方法(参数)——只能用于Python3

在定义子类时,不仅可以定义本身的新方法,还可以对父类的方法进行重新定义,下面将person父类中的get_age给重新定义:

# 父类——person
class person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
        
    def get_name(self):
        print("The guy names %s"%self.name)
    
    def get_age(self):
        print("The guy's age is %s"%self.age)
        
# 定义子类——worker
# 子类继承自父类person
# worker是人,有名字和年龄
class worker(person):
    def __init__(self,name,age,job):
        # 继承父类的属性定义
        # 写法1
        # 父类.__init__(self,参数)
#        person.__init__(self,name,age)
        # 写法2
        # super(子类,self).__init__(参数)
#        super(worker,self).__init__(name,age)
        # 写法3——仅限用于Python3
        # super().__init__(name,age)
        super().__init__(name,age)
        # 定义子类本身的新属性
        self.job = job
        
    # 定义子类本身的函数
    def get_job(self):
        print("The guy is a %s"%self.job)
    
    # 覆盖父类的函数定义
#    def get_age(self):
#        super().get_age()
#        print("next year the guy's age is %s"%self.age)
    
    # 对于子类的方法函数构造也可添加新参数
    def get_age(self,year):
        super().get_age()
        print("next year the guy's age is %s"%self.age)
        print(year)

def main():
    jay = worker('jay',18,'teacher')
    # 获取属性
    print(jay.name)
    # 调用父类的函数
    jay.get_name()
    # 输出子类的新属性
    print(jay.job)
    # 输出子类的新方法
    jay.get_job()
#    # 未添加新参数
#    jay.get_1age()
    # 添加了新参数
    jay.get_age(2020)
    
    
if __name__ == "__main__":
    main()

输出结果:

jay
The guy names jay
teacher
The guy is a teacher
The guy's age is 18
next year the guy's age is 18
2020

且可以发现,在重新定义父类方法时还可以添加新的参数,添加新的参数后在使用时需要将其写入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值