鱼C论坛

 找回密码
 立即注册
查看: 1120|回复: 2

[已解决]关于类的调用问题

[复制链接]
发表于 2022-3-7 22:51:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from class_examples1 import Car


class ElectricCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery = Battery


class Battery:
    def __init__(self, battery_size=70):
        self.battery_size = battery_size

    def describe_battery(self):
        print('This car has a ' + str(self.battery_size) + '-kWh battery')


my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery().describe_battery()

这里的20行中my_tesla.battery().describe_battery()的,my_tesla.battery后边为什么需要加括号,如果是my_tesla.battery.describe_battery()则会报错,请问这是为什么?
最佳答案
2022-3-7 23:01:57
因为在类中定义的方法默认是实例方法,实例方法只有实例调用才会自动传入 self,

而 battery 你赋值为了 Battery 类,还没有实例化,

你可以把代码改成这样:
from class_examples1 import Car


class ElectricCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery = Battery()                                 # 这里加括号,后面就不用加括号


class Battery:
    def __init__(self, battery_size=70):
        self.battery_size = battery_size

    def describe_battery(self):
        print('This car has a ' + str(self.battery_size) + '-kWh battery')


my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()                                  # 这里不加括号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 23:00:50 | 显示全部楼层
self.battery = Battery改成self.battery = Battery()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-7 23:01:57 | 显示全部楼层    本楼为最佳答案   
因为在类中定义的方法默认是实例方法,实例方法只有实例调用才会自动传入 self,

而 battery 你赋值为了 Battery 类,还没有实例化,

你可以把代码改成这样:
from class_examples1 import Car


class ElectricCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery = Battery()                                 # 这里加括号,后面就不用加括号


class Battery:
    def __init__(self, battery_size=70):
        self.battery_size = battery_size

    def describe_battery(self):
        print('This car has a ' + str(self.battery_size) + '-kWh battery')


my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()                                  # 这里不加括号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 03:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表