python入门(五) 类

先考虑一个类:

class Dog() :
    def __init__(self, name, age) :
        self.name = name
        self.age = age
    def sit(self) :
        print(self.name.title() + "is now sitting")
    def roll_over(self) :
        print(self.name.title() + "rolled over!")

方法__init__():

类中的函数统称为方法,而__init__()是一个很特殊的方法,每当用这个类创建实例的时候,Python就会自动运行这个方法(可以类比C++中的构造函数);在__init__()的形参中,self是必不可少且必须位于其他形参前面的形参,它是一个指向实例本身的引用,同时self会自动传递,不需要我们手动传递;且以self为前缀的变量都可供类中所有方法使用,而可被实例访问的变量称为属性

__init__()未显式的包含return语句,但会自动返回一个相关类的实例。

关于修改属性的值,我们有两种方法;

1、直接修改属性的值:

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

    def read_odometer(self): 
        print("This car has " + str(self.odometer_reading) + " miles on it.") 
     
my_new_car = Car('audi', 'a4', 2016) 
my_new_car.odometer_reading = 23 // 直接修改 
my_new_car.read_odometer()

2、通过方法修改属性的值:

class Car(): 
    --snip-- 
         
    def update_odometer(self, mileage): 
        """将里程表读数设置为指定的值""" 
        self.odometer_reading = mileage 
     
my_new_car = Car('audi', 'a4', 2016) 
print(my_new_car.get_descriptive_name()) 
 
my_new_car.update_odometer(23) 
my_new_car.read_odometer() 

关于继承: 

class Car(): 
    --snip-- 

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

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

super()是一个特殊的函数,这行代码让python能够调用父类的方法__init__,父类也称为“超类”(superclass),名称super因此得名;

关于父类重写的方法:

对于部分的父类方法,可能并不符合子类模拟事物的方式,便可以对其进行重写;例如在子类中定义一个方法,其与想要重写的父类方法同名,这样的话,python就不会再考虑这个父类方法,而是只关注在子类中定义的相应方法。

例如,假设Cars有一个名为fill_gas_tank()的方法,这对电动车没有意义,因为电动车连油箱都没有!所以可以这么写:

        

class Car(): 
    --snip-- 

def ElectricCar(Car):
    --snip-- 
    
    def fill_gas_tank(): 
         print("This car doesn't need a gas tank!")

这样,子类就可以保留父类的精华,去除不必要的“糟粕”;

关于将实例用作属性:

用代码模仿实物的时候,可能发现给类添加的细节越来越多了,这时,可以考虑将类的一部分,作为一个独立的类抽离出来,从而可将大类拆分成多个协同工作的小类。

我们将电池作为一个类抽离出来作为例子:

class Car(): 
    --snip--

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.")

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

my_tesla = ElectricCar('tesla', 'model s', 2016)

print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery() 

这里,我们定义了一个新类叫做Battery,它没有继承任何的类;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值