《Python编程:从入门到实践》学习打卡9-类

类的创建

class Dog():
    
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def sit(self):
        print(self.name.title() + ' is sitting' )

    def roll_over(self):
        print(self.name.title() + 'rolled over')
     
    def jump(self,height):
        self.height = height
        print(self.name.title() + 'could jump ' + self.height + ' meters')

D = Dog('wangwang',2) # 实例化

概念

  1. 类是指现实生活中各种对象的抽象化,比如我们常说的狗,也就是狗这一大类,狗类拥有共同的特征,比如它们有姓名,年龄,性别,以及坐滚爬跳各有各的不同点,我们可以将这些概括为属性与行为,属性对应前面的姓名,年龄,性别等,对应上文代码__init__下的内容,行为对应坐滚爬跳等,行为也称为方法,对应上文代码中定义的sit和roll_over函数。
  2. 类的创建使用关键词class,类名使用大写字母开头,后面跟一个括号以及冒号。
  3. 第一点提到的姓名,性别,年龄,坐滚爬跳等都是抽象的概念,并没有指定具体的内容是什么,只是指出有这一项,具体内容是什么还需要后面进一步实例化
  4. 实例是指基于类创建的实际对象,比如基于狗类我们创建一个狗叫做旺旺,旺旺拥有类中的所有属性以及行为,它拥有姓名,年龄,性别以及自己独特的坐滚爬跳的一套行为,具体什么样应该在实例中表现出来。

说明

  1. 代码中__init__是一种特殊的方法,每当创建一个新的实例时都会自动调用它,注意首位双下划线,这是系统内置方法的特征,区别于普通的方法。在__init__中都会有一个形参self,后面的形参可以自行根据需要添加,但是self必不可少,当对一个类进行实例化时,会自动传递self,self是指向本身的意思,也就是自报家门,表明要对这个类进行实例化,这个类所有的属性以及方法都得围着我转,我说什么你们就得以我为中心进行操作。
  2. self不需要再实例化的实参表中明确指出,一旦实例化后,系统就会自动产生一个self实参传递给类,如代码D = Dog(‘wangwang’,2)没有写出self实参,只写出新定义的两个实参。
  3. 在后面两个函数定义中我们都看到了括号后面的形参都为self,对应第一点所说的一切都要以实例为中心,而且必不可少,还看到self.name的形式,以及对他的赋值,对于可赋值的变量称为属性,属性并不都一定时__init__下才有,方法中的参数也可以有,比如代码中的jump方法。

实例的创建

class Dog():
    
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def sit(self):
        print(self.name.title() + ' is sitting' )

    def roll_over(self):
        print(self.name.title() + 'rolled over')
        
my_dog = Dog('wangwang',2) # 创建实例
his_dog = Dog('wangcai',1)
my_dog.name # 访问属性
his_dog.name
my_dog.sit() # 调用方法
his_dog.roll_over()
  1. 一般使用大写字母开头作为类的命名,小写字母开头作为实例的命名
  2. 建立实例形式,这一步时实例化的开始,也是必不可少的一步,实例可以同时创建多个,如上表示,首先需要传入实参,也就是对属性进行设置,如姓名以及年龄,当__init__内只有self时,实例化时虽然不需要填实参,但是括号必须带上
  3. 实例化之后对属性的访问形式为实例名.属性,对方法的调用形式为实例名.函数(参数)

课后习题

9-1餐馆

class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type

    def describe_restaurant(self):
        print('This restaurant\'s name is ' + self.restaurant_name.title())
        print('It\'s cuisine type is ' + self.cuisine_type)

    def open_restaurant(self):
        print('Opening')

restaurant = Restaurant('tong fu restaurant','chuancai')
restaurant.restaurant_name
restaurant.cuisine_type # 访问属性
restaurant.describe_restaurant()
restaurant.open_restaurant() # 调用函数

9-2三家餐馆

class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type

    def describe_restaurant(self):
        print('This restaurant\'s name is ' + self.restaurant_name.title())
        print('It\'s cuisine type is ' + self.cuisine_type)

    def open_restaurant(self):
        print('Opening')
        
restaurant_1 = Restaurant('tong fu restaurant','chuancai')
restaurant_1.describe_restaurant()
restaurant_2 = Restaurant('sah xian snack','mincai')
restaurant_2.describe_restaurant()
restaurant_3 = Restaurant('lan zhou noddles','qingzhen')
restaurant_3.describe_restaurant()

9-3用户

class User():
    def __init__(self,first_name,last_name):
        self.first_name = first_name
        self.last_name = last_name

    def describe_users(self):
        print('first name is:' + self.first_name)
        print('last name is:' + self.last_name)
    def greet_user(self):
        print('Hello ' + self.first_name + ' ' + self.last_name + ',time for returning money!')

user_1 = User('kobe','brayant')
user_1.describe_users()
user_1.greet_user()

对类和实例的处理

设定属性默认值

需要进行默认值设定的属性可直接在__init__下进行赋值修改可以不直接写在括号内的参数中

class Car():
    def __init__(self,make,model,year):
        self.make = make
        self.model = model
        self.year = year
        self.miles = 0 # 设定属性默认值
        
    def get_descriptive_name(self):
        long_name = self.make + ' ' + self.model + ' ' + str(self.year)
        return long_name

my_car = Car('honda','accord',2010)
print(my_car.get_descriptive_name())
print(my_car(miles))

修改属性值

直接对属性值进行修改

class Dog():
    
    def __init__(self,name,age):
        self.name = name
        self.age = age

my_dog = Dog('wangwang',2)
my_dog.name = 'wangcai'
print(my_dog.name) # 'wangcai'

通过方法进行修改

class Dog():
    
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def jump(self,height):
        self.height = height
        print(self.name.title() + 'could jump ' + self.height + ' meters')
my_dog = Dod('wangwang',2)
my_dog.jump(12)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值