【python系统学习】11.面向对象

发布于:2025-09-02 ⋅ 阅读:(22) ⋅ 点赞:(0)
1. 类与对象
1.1 类

        python中,用关键字 class 定义类。

class 类名:

        pass        

'''扩展: pass 语句是一个空操作语句,它什么也不做,仅作为一个占位符存在,用于保持代码结构的完整性。'''

        类中可以包含若干 属性 和 方法。属性(定义在类中的变量)用于描述对象的特征,方法(定义在类中的函数)用来定义对象的行为。

class Cat:
    eye_num=2
    tail_num=1
    leg_num=4
1.2 类的实例化

实例对象= 类()

class 猫:
    eye_num=2
    tail_num=1
    leg_num=4
狸花猫 = 猫() #类的实例化
print(type(狸花猫))    #输出<class '__main__.猫'>

        ‘狸花猫’ 是 ‘猫’ 的实例。用type()查看‘狸花猫’的类型为<class '__main__.猫'>,__main__是程序入口,‘猫’是定义的类。

1.3 属性的定义与修改

        实例与实例间是相互独立的

class 神:
    eye_num=2
    tail_num=0
    leg_num=2
二郎神=神()
孙悟空=神()
二郎神.eye_num=3
print(二郎神.eye_num)    #输出3
print(孙悟空.eye_num)    #输出2

        修改‘二郎神’的属性,不会影响‘孙悟空’的属性,也不会对‘神’这个类产生影响。

1.4 方法的定义与调用

        类的方法用来描述对象的行为,实例对象调用方法 时,Python 会 强制性 地将 实例对象本身 传递给类方法的 第一个参数,一般命名为self(对象)

1.4.1

class 神:
    eye_num=2
    tail_num=0
    leg_num=2
    def 信息(self, 姓名,武器, 能力):    #self是实例对象本身
        self.武器=武器
        self.能力=能力
        print('%s的武器是%s,精通%s'%(姓名,武器,能力))
二郎神=神()     #二郎神 是 神 的实例
齐天大圣=神()    #齐天大圣 是 神 的实例
神.信息(二郎神,'杨戬','三尖两刃刀','八九玄功')
神.信息(齐天大圣,'孙悟空','金箍棒','七十二变')
#杨戬的武器是三尖两刃刀,精通八九玄功
#孙悟空的武器是金箍棒,精通七十二变

神.信息(二郎神,'杨戬','三尖两刃刀','八九玄功')
神.信息(齐天大圣,'孙悟空','金箍棒','七十二变')

1.4.2

class 神:
    eye_num=2
    tail_num=0
    leg_num=2
    def 信息(self, 姓名,武器, 能力):    #self是实例对象本身
        self.武器=武器
        self.能力=能力
        print('%s的武器是%s,精通%s'%(姓名,武器,能力))
二郎神=神()     #二郎神 是 神 的实例
齐天大圣=神()    #齐天大圣 是 神 的实例
二郎神.信息('杨戬','三尖两刃刀','八九玄功')
齐天大圣.信息('孙悟空','金箍棒','七十二变')
#杨戬的武器是三尖两刃刀,精通八九玄功
#孙悟空的武器是金箍棒,精通七十二变

二郎神.信息('杨戬','三尖两刃刀','八九玄功')       
齐天大圣.信息('孙悟空','金箍棒','七十二变')       

强制性将实例对象 二郎神 和 齐天大圣 本身传递给类方法self,实际上运行的是:

        神.信息(二郎神,'杨戬','三尖两刃刀','八九玄功')
        神.信息(齐天大圣,'孙悟空','金箍棒','七十二变')

1.5 __init__方法

        __init__方法会在实例化新的对象时 自动调用。

class 神:
    eye_num=2
    tail_num=0
    leg_num=2
    def __init__(self):
        print('成功创建角色')
    def 信息(self, 姓名,武器, 能力):    #self是实例对象本身
        self.武器=武器
        self.能力=能力
        print('%s的武器是%s,精通%s'%(姓名,武器,能力))
二郎神=神()     #二郎神 是 神 的实例
二郎神.信息('杨戬','三尖两刃刀','八九玄功')
齐天大圣=神()    #齐天大圣 是 神 的实例
齐天大圣.信息('孙悟空','金箍棒','七十二变')
#成功创建角色
#杨戬的武器是三尖两刃刀,精通八九玄功
#成功创建角色
#孙悟空的武器是金箍棒,精通七十二变

2. 继承与多态

class A(B)        #A继承自B,A是B的子类

        A类继承自B类,反过来说,B类派生出了A类。因此A类是B类的子类,B类是A类的父类。子类 A 将 自动获得 B 类中定义的 所有属性与方法。

class B:
    pass
class A(B):
    pass
a=A()
print(isinstance(a,A))
print(isinstance(a, B))

扩展:isinstance()函数接受两个参数,第一个参数为某个实例对象,第二个参数为某个类,能够检查第一个参数是否是第二个参数的 实例,并返回 True 或 False

2.1 子类调用父类方法

子类.方法名

class 生灵:
    def 属性(self,name):
        self.生命 = 100
        self.法力 = 100
        self.攻击 = 10
        self.防御 = 5
        print(f'{name}属性:')
        print(f'生命: {self.生命}, 法力: {self.法力}, 攻击: {self.攻击}, 防御: {self.防御}')
class 人(生灵):
    pass
张三=人()
张三.属性('张三')

扩展:f-string语法,是一种在字符串中直接嵌入变量或表达式的方式。代码中的f前缀表示这是一个格式化字符串字面量,花括号{}内的内容会被替换为实际的值。

2.2 子类重写父类方法

        在子类创建时重写方法,Python 会先检查自身类型中有没有对应方法。

class 生灵:
    def 属性(self,name):
        self.生命 = 400
        self.法力 = 10
        self.攻击 = 100
        self.防御 = 5
        print(f'{name}属性:')
        print(f'生命: {self.生命}, 法力: {self.法力}, 攻击: {self.攻击}, 防御: {self.防御}')
class 人(生灵):
    pass
class 仙(生灵):
    def 属性(self, name):    #重写方法
        self.生命 = 1000
        self.法力 = 1000
        self.攻击 = 100
        self.防御 = 50
        print(f'{name}属性:')
        print(f'生命: {self.生命}, 法力: {self.法力}, 攻击: {self.攻击}, 防御: {self.防御}')

class 魔(生灵):
    def 属性(self, name):    #重写方法
        self.生命 = 2000
        self.法力 = 500
        self.攻击 = 150
        self.防御 = 30
        print(f'{name}属性:')
        print(f'生命: {self.生命}, 法力: {self.法力}, 攻击: {self.攻击}, 防御: {self.防御}')
张三=人()
张三.属性('张三')
李四=仙()
李四.属性('李四')
王五=魔()
王五.属性('王五')

        两个方法虽然名字相同,实际完成的任务却不相同。这种现象被称为 多态


网站公告

今日签到

点亮在社区的每一天
去签到