Python笔记-013-类

1.13.1 :创建和使用类
1)创建Dog类
根据Dog类创建的每个实力都将存储名字和年龄。我们赋予每条小狗蹲下sit()和打滚roll_over()的能力

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!.")
my_dog = Dog('willie', 6)
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's name is "+str(my_dog.age)+" years old.")

编译通过,但是目前为止任不知道这个类能不能调用和使用。
方法 init()
init是一个特殊的方法,每当你根据Dog类创建新实例时,Python都会自动运行它
双下斜杆这是一种约定,为了避免Python默认方法与普通方法发生名称的冲突:

我在写上面的程序的时候编译一直没通过,想了很久,报错是这样的
**Traceback (most recent call last):
File “E:/Python_Study/python_charm/pycharm_study.py”, line 702, in
my_dog = Dog(‘willie’, 6)
TypeError: object() takes no parameters

最后发现我把 def init(self,name,age): 一直 写成 def int(self,name,age):,使用pycharm调用的第一个 结果一直报错,自己粗心也一直没看出问题,最后看了度娘让我研究 init有没有写错才发现,希望大家不要跟我一样踩坑,不过踩了坑的好处在于我以后肯定不会在这里再跳坑了。

1.13.2 :调用方法


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!.")
my_dog = Dog('willie', 6)
my_dog.sit()
my_dog.roll_over()

Willieis now sitting.
Willierolled over!.

Process finished with exit code 0

遇到代码my_dog.sit()时候 ,Python在类Dog中查找方法sit()并运行其代码,Python以同样的方法解读代码my_dog.roll.over()

1.13.3:创建多个实例

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!.")
my_dog = Dog('willie', 6)
your_dog= Dog("Lucky",4)
# my_dog.sit()
# my_dog.roll_over()
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's name is "+str(my_dog.age)+" years old.")
my_dog.sit()
my_dog.roll_over()

print("\nYour dog's name is " + your_dog.name.title() + ".")
print("Your dog is " + str(your_dog.age) + " years old.")
your_dog.sit()

动手练一练
9-1 餐馆 :创建一个名为Restaurant 的类,其方法init() 设置两个属性:restaurant_name 和cuisine_type 。创建一个名 为describe_restaurant() 的方法和一个名为open_restaurant() 的方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。

class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.restaurant_name=restaurant_name
        self.cuisine_type=cuisine_type
    def describe_restaurant(self):
        print(self.restaurant_name.title()+" restaurant is a  good place")
        print("The restaurant cuisine_type is "+self.cuisine_type.title())
    def open_restaurant(self):
        print("The restaurant is opened")

restaurant=Restaurant("Guangzhou Jiujia",'Yue Cai')
restaurant.describe_restaurant()
restaurant.open_restaurant()

9-2 三家餐馆 :根据你为完成练习9-1而编写的类创建三个实例,并对每个实例调用方法describe_restaurant() 。

class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.restaurant_name=restaurant_name
        self.cuisine_type=cuisine_type
    def describe_restaurant(self):
        print(self.restaurant_name.title()+" restaurant is a  good place")
        print("The restaurant cuisine_type is "+self.cuisine_type.title())
    def open_restaurant(self):
        print("The restaurant is opened")

restaurant1=Restaurant("Guangzhou Jiujia",'Yue Cai')
restaurant1.describe_restaurant()
restaurant1.open_restaurant()
restaurant2=Restaurant("A",'B')
restaurant2.describe_restaurant()
restaurant3=Restaurant("A1",'B1')
restaurant3.describe_restaurant()

9-3 用户 :创建一个名为User 的类,其中包含属性first_name 和last_name ,还有用户简介通常会存储的其他几个属性。在类User 中定义一个名 为describe_user() 的方法,它打印用户信息摘要;再定义一个名为greet_user() 的方法,它向用户发出个性化的问候。
创建多个表示不同用户的实例,并对每个实例都调用上述两个方法。

class User():
    def __init__(self,first_name,last_name):
        self.first_name=first_name
        self.last_name=last_name
    def describe_user(self):
        print("fitst_name :", self.first_name, " last_name: ", self.last_name)
    def greet_user(self):
        print("Hello,"+self.first_name+" "+self.last_name+"!")
user=User("Gonathan","Guo")
user.describe_user()
user.greet_user()

user=User("Jack","Ma")
user.describe_user()
user.greet_user()

user=User("Tencent","Ma")
user.describe_user()
user.greet_user()

fitst_name : Gonathan last_name: Guo
Hello,Gonathan Guo!
fitst_name : Jack last_name: Ma
Hello,Jack Ma!
fitst_name : Tencent last_name: Ma
Hello,Tencent Ma!

1.13.4:修改类属性的值

class Car():

    def __init__(self,make,model,year):
        "初始化描述汽车属性"
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0 #注意在类中直接添加一个形参,默认为0
    def get_descriptive_name(self):
        long_name=str(self.year)+" "+self.make+' '+self.model
        return long_name.title()
    def read_odometer(self):   #增加一条读里程数的函数
        print("This car has "+str(self.odometer_reading)+" miles on it.")
my_new_car=Car('audi','a4','2016')
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading=23 #直接访问属性,进行修改
my_new_car.read_odometer()

使用句点表示法直接访问并设置汽车的属性odometer_reading.直接在my_new_car找到属性odometer_reading并将该属性的值设置为23.

1.13.5:通过方法修改属性的值

class Car():

    def __init__(self,make,model,year):
        "初始化描述汽车属性"
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0 #注意在类中直接添加一个形参,默认为0
    def get_descriptive_name(self):
        long_name=str(self.year)+" "+self.make+' '+self.model
        return long_name.title()
    def read_odometer(self):   #增加一条读里程数的函数
        print("This car has "+str(self.odometer_reading)+" miles on it.")
    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.odometer_reading=23 #直接访问属性,进行修改
my_new_car.update_odometer(110)  #通过直接调用函数的方法修改相应的值
my_new_car.read_odometer()

可对方法update_odometer()进行扩展,使其在修改里程数表读数的时候做些额外的工作,下面添加一些逻辑,禁止任何人将里面的里程表读数往回调:
同时增加一行对属性的值进行递增

class Car():

    def __init__(self,make,model,year):
        "初始化描述汽车属性"
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0 #注意在类中直接添加一个形参,默认为0
    def get_descriptive_name(self):
        long_name=str(self.year)+" "+self.make+' '+self.model
        return long_name.title()
    def read_odometer(self):   #增加一条读里程数的函数
        print("This car has "+str(self.odometer_reading)+" miles on it.")
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("You can't roll back an odometer")
    def increment_odometer(self,miles):

        self.odometer_reading+=miles

my_new_car=Car('audi','a4','2016')
print(my_new_car.get_descriptive_name())
# my_new_car.odometer_reading=23 #直接访问属性,进行修改
my_new_car.update_odometer(23000)  #通过直接调用函数的方法修改相应的值
my_new_car.read_odometer()

my_new_car.increment_odometer(1000)
my_new_car.read_odometer()

2016 Audi A4
This car has 23000 miles on it.
You can’t roll back an odometer
This car has 24000 miles on it.

动手练一练
9-4


class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.restaurant_name=restaurant_name
        self.cuisine_type=cuisine_type
        self.number_served=0
    def describe_restaurant(self):
        print(self.restaurant_name.title()+" restaurant is a  good place")
        print("The restaurant cuisine_type is "+self.cuisine_type.title())
    def open_restaurant(self):
        print("The restaurant is opened")
    def restaurant(self,number):
        self.number_served=number
    def restaurant_incrase(self,numberadd):
        self.number_served+=numberadd
    def read_number_served(self):   #增加一条读里程数的函数
        print("There hve " + str(self.number_served) + " people severed in it")
restaurant1=Restaurant("Guangzhou Jiujia",'Yue Cai')
restaurant1.describe_restaurant()
restaurant1.open_restaurant()
restaurant1.restaurant(23)
restaurant1.read_number_served()
restaurant1.restaurant_incrase(15)
restaurant1.read_number_served()

Guangzhou Jiujia restaurant is a good place
The restaurant cuisine_type is Yue Cai
The restaurant is opened
There hve 23 people severed in it
There hve 38 people severed in it

9-5

class User():
    def __init__(self,first_name,last_name):
        self.first_name=first_name
        self.last_name=last_name
        self.login_attempts=1
    def describe_user(self):
        print("fitst_name :", self.first_name, " last_name: ", self.last_name)
    def greet_user(self):
        print("Hello,"+self.first_name+" "+self.last_name+"!")
    def increment_login_attempts(self):
        self.login_attempts +=1
    def reset_login_attempts(self):
        self.login_attempts=0
    def read_login_attempts(self):
        print(self.first_name+" "+self.last_name+","+"you have been login "+str(self.login_attempts)+" times.")

Gonathan Guo,you have been login 1 times.
Gonathan Guo,you have been login 2 times.
Gonathan Guo,you have been login 6 times.
Gonathan Guo,you have been login 0 times.

1.13.6:继承父类得值
注意点:创建子类时,父类必须包含在当前文件中,且位于子类前面,在2处,我们定义了子类ElectricCar。定义子类时,必须在括号内指定父类得名称,方法 init()接受创建Car实例所需得信息。
super()用于将父类跟子类相关联起来。

lass Car():

    def __init__(self,make,model,year):
        "初始化描述汽车属性"
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0 #注意在类中直接添加一个形参,默认为0
    def get_descriptive_name(self):
        long_name=str(self.year)+" "+self.make+' '+self.model
        return long_name.title()
    def read_odometer(self):   #增加一条读里程数的函数
        print("This car has "+str(self.odometer_reading)+" miles on it.")
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("You can't roll back an odometer")
    def increment_odometer(self,miles):

        self.odometer_reading+=miles
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())

1.13.7:将实例用作属性
将一个Battery 实例作为ElectricCar类一个属性

class Car():

    def __init__(self,make,model,year):
        "初始化描述汽车属性"
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0 #注意在类中直接添加一个形参,默认为0
    def get_descriptive_name(self):
        long_name=str(self.year)+" "+self.make+' '+self.model
        return long_name.title()
    def read_odometer(self):   #增加一条读里程数的函数
        print("This car has "+str(self.odometer_reading)+" miles on it.")
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("You can't roll back an odometer")
    def increment_odometer(self,miles):

        self.odometer_reading+=miles
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()

    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_descriptive_name())
my_tesla.battery.describe_battery()

Python从入门到实践 9-9电瓶容量升级



class Car():

    def __init__(self,make,model,year):
        "初始化描述汽车属性"
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0 #注意在类中直接添加一个形参,默认为0
    def get_descriptive_name(self):
        long_name=str(self.year)+" "+self.make+' '+self.model
        return long_name.title()
    def read_odometer(self):   #增加一条读里程数的函数
        print("This car has "+str(self.odometer_reading)+" miles on it.")
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("You can't roll back an odometer")
    def increment_odometer(self,miles):

        self.odometer_reading+=miles
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.")

    def fill_gas_tank(self):
        print("This car doesn't need a gas tank!")

    def get_range(self):
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range = 270
        message = "This car can go approximately " + str(range)
        message += " miles on a full charge."
        print(message)
    def upgtade_battery(self):
        if self.battery_size !=85:
            self.battery_size=85
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()
my_tesla.battery.get_range()
my_tesla.battery.upgtade_battery()
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()

2016 Tesla Model S
This car has a 70 -kwh battery.
This car can go approximately 240 miles on a full charge.
This car has a 85 -kwh battery.
This car can go approximately 270 miles on a full charge.

1.13.8:导入类
car.py

class Car():

    def __init__(self,make,model,year):
        "初始化描述汽车属性"
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0 #注意在类中直接添加一个形参,默认为0
    def get_descriptive_name(self):
        long_name=str(self.year)+" "+self.make+' '+self.model
        return long_name.title()
    def read_odometer(self):   #增加一条读里程数的函数
        print("This car has "+str(self.odometer_reading)+" miles on it.")
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("You can't roll back an odometer")
    def increment_odometer(self,miles):

        self.odometer_reading+=miles

m_car.py

from car import Car
my_new_car= Car('audi','a4',2016)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading=23
my_new_car.read_odometer()

2016 Audi A4
This car has 23 miles on it.

1.13.8:导入整个模块

import car
# from car import ElectricCar,Car
my_beetle= car.Car('Volkswagen','beetle',2016)
print(my_beetle.get_descriptive_name())


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

猜你喜欢

转载自blog.csdn.net/qq_35989861/article/details/81879144