python中的类

在__init__() 方法的定义中,形参self必不可少,还必须位于其他形参的前面。为何必须在方法定义中包含形参self呢?因为python调用这个__init__()方法来创建实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能访问类中的属性和方法。以self为前缀的变量都可供类中的所有方法使用。

class Car():
    def __init__(self,make,model,year):
        self.make = make
        self.model = model
        self.year = year

    def get_describe_name(self):
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name

    def fill_gas_tank(self):
        print("ok,It is running")

class Battery():
    def __init__(self,battery_size=85):
        self.battery_size = battery_size
    
    def describe_battery(self):
        print("This car has a " + str(self.battery_size) + "-kWh battery.")

    def get_scope(self):  # 剩余里程
        if self.battery_size == 70:
            scope = 240
        elif self.battery_size == 85:
            scope = 270
        else:
            scope = 0
        message = "This car can go approximately " + str(scope) + " miles on a full charge."
        print(message)

class ElectricCar(Car):  # 继承Car类
    def __init__(self,make,model,year):
        super().__init__(make,model,year)
        self.battery_size = 70  # 这里用两种方法来表示电瓶大小,这个是第一种
        self.battery = Battery()  # 这是第二种方法,将实例作为属性,这个实例是Battery类的实例,这样的话可以尽可能详细地描述电瓶,不会导致Electric类混乱不堪

    def describe_battery(self):   # 子类自己的方法
        print("This car has a " + str(self.battery_size) + "-kWh battery.")

    def fill_gas_tank(self):  # 重写父类的方法
        print("This car doesn't need a gas tank!")

my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_describe_name())  # 如果子类中没有该方法,就调用父类的方法
my_tesla.describe_battery()
my_tesla.fill_gas_tank()
my_tesla.battery.describe_battery()
my_tesla.battery.get_scope()

2016 tesla model s
This car has a 70-kWh battery.
This car doesn't need a gas tank!
This car has a 85-kWh battery.
This car can go approximately 270 miles on a full charge.
自己稍微补充一点,有时候定义类,可能没有__init__()函数。
class test():
    def hello(self):
        print("hello")

a = test()
a.hello()
hello
从模块(文件)中导入类,跟函数存储在模块(文件)中,导入函数类似,只不过没有命名为别名。
impot module_name   # 导入整个模块
module_name.class_name()  # 使用模块中的类

from module_name import class_0,class_1,class_2  # 导入特定的类
class_0.function()  # 直接使用类即可,不用再加模块名

# 导入模块中的所有类
from module_name import *
类编码风格

类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线,实例名和模块名都采用小写格式,并在单词之间加上下划线。

每个类,都应该紧跟在类定义后面包含一个文档字符串,这个文档字符串简要地描述类的功能,并遵循编写函数的文档字符串时采用的格式约定,每个模块也都应包含一个文档字符串,对其中的类可用于做什么进行描述。

在类中,可使用一个空行来分隔方法;在模块中,可使用两个空行来分隔类。

同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import语句,再添加一个空行,然后编写导入你自己编写的模块的import语句,在包含多条import语句的程序中,这种做法让人更容易明白程序使用的各个模块都来自何方。


以上内容为作者总结自参考书籍《python编程入门到实践》,希望对你有所帮助。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值