Python面向对象--方法

1. 实例方法

方法:在类的作用域里面定义的函数,就叫做方法

__init__也是一个方法,称为初始化方法,也可以称为初始化函数

把带有self固定参数的方法叫做实例方法,这个方法是属于实例的

实例方法的调用,只能由实例调用,类不能调用实例方法

调用格式:

对象.方法()

class Mobile:
    can_call = True
    # 初始化方法
    def __init__(self,brand,color):
        self.brand = brand
        self.color = color
    # 实例方法
    def sell(self,price):
        print('某部手机被卖了')
    def call(self):
        print('某部手机正在打电话')
    def take_picture(self):
        print('某部手机正在拍照')
mobile = Mobile('apple','白色')
mobile.call()
Mobile.call()

运行结果:

 当方法有参数时,遵循和普通函数一样的规则,该传参的传参

__init__只有返回值None,其他方法的返回值和普通函数的返回值规则一样

class Mobile:
    can_call = True
    # 初始化方法
    def __init__(self,brand,color):
        self.brand = brand
        self.color = color
    # 实例方法
    def sell(self,price):
        print(f'某部手机被卖了,卖了{price}元')
mobile = Mobile('apple','白色')
result = mobile.sell(3000)
print(f'result值是:{result}') # 因为实例方法没有return,所以result的值是None

 运行结果:

某部手机被卖了,卖了3000元
result值是:None

class Mobile:
    can_call = True
    # 初始化方法
    def __init__(self,brand,color):
        self.brand = brand
        self.color = color
    # 实例方法
    def sell(self,price,discount=1): # 设置了位置参数和默认参数
        print(f'某部手机被卖了,卖了{price*discount:.0f}元')
        return price*discount # 因为有了返回值,所以result就不是None
mobile = Mobile('apple','白色')
result = mobile.sell(3000,0.8) # 默认参数传值了,就按传的值计算
print(f'result值是:{result:.0f}')

运行结果:

某部手机被卖了,卖了2400元
result值是:2400

在类的里面,一个实例方法调用另一个实例方法,格式:self.方法()

在类的里面,实例方法调用实例属性,格式:self.实例属性

class Mobile:
    can_call = True
    # 初始化方法
    def __init__(self,brand,color):
        self.brand = brand
        self.color = color
    # 实例方法
    def sell(self):
        print('某部手机被卖了')
    def call(self):
        print('某部手机正在打电话')
        # 调用record方法
        self.record()
    def take_picture(self):
        # 调用实例属性
        print(f'一部{self.brand}手机正在拍照')
    def record(self):
        print('正在录音')
mobile = Mobile('apple','白色')
mobile.call()
mobile.take_picture()

运行结果:

某部手机正在打电话
正在录音
一部apple手机正在拍照

2. 类方法

类方法:就是类可以调用的方法(注意是写在类里面的)

格式:

@classmethod

def 方法名称(cls):

      内容

class Mobile:
    can_call = True
    def __init__(self,brand,color):
        self.brand = brand
        self.color = color
    def sell(self,price):
        print('某部手机被卖了')
    def call(self):
        print('某部手机正在打电话')
        # 调用record方法
        self.record()
    def take_picture(self):
        # 调用实例属性
        print(f'一部{self.brand}手机正在拍照')
    def record(self):
        print('正在录音')
    @ classmethod
    def texting(cls):
        print('可以发短信')
mobile = Mobile('apple','白色')
Mobile.texting() # 类调用类方法
mobile.texting() # 实例调用类方法

 运行结果:

可以发短信
可以发短信

 总结:

类方法:类可以调用,实例也可以调用 

实例方法:实例可以调用 ,类不可以调用

3. 静态方法

静态方法:没有固定参数,和类、对象没有直接关联,只是一个普通函数,放在类里面方便管理

格式:

@staticmethod

def 方法名称():

      内容

class Mobile:
    can_call = True
    def __init__(self,brand,color):
        self.brand = brand
        self.color = color
    def sell(self,price):
        print('某部手机被卖了')
    def call(self):
        print('某部手机正在打电话')
    def take_picture(self):
        print(f'一部{self.brand}手机正在拍照')
    def record(self):
        print('正在录音')
    @ classmethod
    def texting(cls):
        print('可以发短信')
    @ staticmethod
    def package():
        print('正在打包手机')
mobile = Mobile('apple','白色')
Mobile.package()
mobile.package()

 运行结果:

正在打包手机
正在打包手机

4. 为什么要用类和对象 

普通函数就可以做类和对象的功能,为什么选择用类和对象呢?下面举个栗子,就会明白了

# 使用函数编写过程和调用
name = 'lucy'
sexy = '公'
age = 1
def eating(name,sexy,age):
    print(f'{name}正在吃狗粮,他的性别是{sexy},年龄是{age}')
def bark(name,sexy,age):
    print(f'{name}正在叫,他的性别是{sexy},年龄是{age}')
def bath(name,sexy,age):
    print(f'{name}正在洗澡,他的性别是{sexy},年龄是{age}')
eating(name,sexy,age)
bark(name,sexy,age)
bath(name,sexy,age)
# 使用类编写和调用
class Dog():
    def __init__(self,name,sexy,age):
        self.name = name
        self.sexy = sexy
        self.age = age
    def eating(self):
        print(f'{self.name}正在吃狗粮,他的性别是{self.sexy},年龄是{self.age}')
    def bark(self):
        print(f'{self.name}正在叫,他的性别是{self.sexy},年龄是{self.age}')
    def bath(self):
       print(f'{self.name}正在洗澡,他的性别是{self.sexy},年龄是{self.age}')
dog = Dog('乐乐','母',2)
dog.eating()
dog.bark()
dog.bath()

运行结果:

lucy正在吃狗粮,他的性别是公,年龄是1
lucy正在叫,他的性别是公,年龄是1
lucy正在洗澡,他的性别是公,年龄是1
乐乐正在吃狗粮,他的性别是母,年龄是2
乐乐正在叫,他的性别是母,年龄是2
乐乐正在洗澡,他的性别是母,年龄是2

总结:虽然类封装的过程比较麻烦,但调用时省事,不用每次都传参数了

猜你喜欢

转载自blog.csdn.net/weixin_40611700/article/details/120449858