【Python编程:从入门到实践】类(class)

本文介绍Python中的类概念,包括类的基本定义、属性和方法的使用、类的继承及重写等。通过具体例子展示如何创建类并利用类解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Class 类

  • 类 class
    • init()
    • 继承
    • self 指向实例本身的引用
    • 属性
  • 创建实例
    • 访问属性 .运算符
    • 调用方法
    • 创建多个实例
  • 使用类和实例
    • 给属性指定默认值 在__init__()内
    • 修改属性值
      • 直接修改 通过属性值访问
      • 通过方法修改
      • 通过方法对属性进行增减
  • 继承
    • 指定父类的名称
    • 子类继承父类的属性和方法
    • super()函数关联父类和子类
    • 给子类定义属性和方法
    • 重写父类的方法
    • 将实例作为属性
    • 模拟实物
  • 导入类
    • 导入单个类
    • 一个模块存入多个类
    • 一个模块导入多个类
  • python标准库

9.1.1 创建和实用类

#Dog类
class Dog(object):
    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()+' is rolled over')
#根据Dog类创建一个实例my_dog
my_dog = Dog('peter',8)
# 访问属性
my_dog.name
my_dog.age
# 使用方法
my_dog.sit()
my_dog.roll_over()
# Peter is sitting
# Peter is rolled over

9.1.2 餐馆类

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

    def describe_restaurent(self):
        print("餐馆的名字是"+self.restaurent_name)
        print("厨房类型是"+self.cuisine_type)

    def open_restaurent(self):
        print(self.restaurent_name+"餐馆正在营业!")

my_restaurent = Restaurant('海底啦','火锅')
my_restaurent.describe_restaurent()
# 餐馆的名字是海底啦
# 厨房类型是火锅
my_restaurent.open_restaurent()
# 海底啦餐馆正在营业!

9.1.3 用户类

class User():
    def __init__(self, first_name, last_name, age, address, height, weight):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.address = address
        self.height = height
        self.weight = weight
    
    def describe_user(self):
        print((self.first_name+self.last_name).title()+'的年龄是'+str(self.age)+","+
        self.address+"人,身高"+str(self.height)+'厘米,体重'+str(self.weight)+'千克。')
    
    def great_user(self):
        print('hello!'+(self.first_name+self.last_name).title())

me = User('li','binglin',22,'四川',187,74)
me.describe_user()
# Libinglin的年龄是22,四川人,身高187厘米,体重74千克。

9.2.1 Car类

class Car():
    def __init__(self,make,model,year):
        self.make = make
        self.model = model
        self.year = year
        self.odometer = 0
    def display_info(self):
        print(self.make)
        print(self.model)
        print(self.year)
    # 修改属性默认函数
    def update_odometer(self,new_value):
        if new_value > self.odometer:
            self.odometer = new_value
    # 递增属性值
    def add_odometer(self,add_value):
        if add_value > 0:
            self.odometer += add_value
    # 读出属性默认值
    def read_odometer(self):
        print('这辆车已经跑了'+ str(self.odometer)+"公里了")

car1 = Car('auto','a4',2006)
# 输出属性默认值
car1.read_odometer()
# 这辆车已经跑了0公里了

# 修改属性默认值-直接修改
car1.odometer = 1000
car1.read_odometer()
# 这辆车已经跑了1000公里了

# 修改属性默认值-通过方法修改
car1.update_odometer(2000)
car1.read_odometer()
# 这辆车已经跑了2000公里了

#递增属性值
car1.add_odometer(100)
car1.read_odometer()
#这辆车已经跑了2100公里了

9.2.2 尝试登录次数

class User():
    def __init__(self, login_attempts):
        self.login_attempts = login_attempts
    # 加一
    def increment_login_attempts(self):
        self.login_attempts += 1
    # 置0
    def reset_login_attempts(self):
        self.login_attempts = 0
# 创建一个实例,默认值为100
user = User(100)
user.increment_login_attempts()
user.increment_login_attempts()
user.increment_login_attempts()
user.increment_login_attempts()
user.increment_login_attempts()
user.login_attempts
# 调用五次递增函数 输出 105
user.reset_login_attempts()
user.login_attempts
# 调用置零函数 输出0

9.3.1 继承 重写父类方法

# 子类ElenticCar继承自父类Car,继承父类的方法和属性
class ElectricCar(Car):
    def __init__(self,make,model,year):
        super().__init__(make,model,year)
        self.battery_size = 100 
    # 更行电池容量
    def update_battery_size(self,new_size):
        self.battery_size = new_size
    # 显示电池数据
    def display_battery_size(self):
        print(self.battery_size)
    # 重写父类方法
    def display_info(self):
        print('父类方法已修改')

my_ecar = ElectricCar('tesla','model y',1999)
my_ecar.read_odometer()
# 这辆车已经跑了0公里了
my_ecar.display_battery_size()
# 100
my_ecar.update_battery_size(200)
my_ecar.display_battery_size()
# 200

# 在子类中重写父类方法
my_ecar.display_info()
# 父类方法已修改

9.3.2 将实例用作属性

class Address():
    def __init__(self,address = '四川'):
        self.address = address
    
    def update_address(self,new_address):
        self.address = new_address
    
    def display_address(self):
        print(self.address)

class PhoneNumber():
    def __init__(self,number):
        self.number = number
    def update_number(self,new_number):
        self.number = new_number
    
    def display_phone_number(self):
        print(self.number)

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

    def display_full_name(self):
        print((self.first_name+self.last_name).title())

class China(People):
    def __init__(self,first_name,last_name):
        super().__init__(first_name,last_name)
        # 类作为参数
        self.phone_number = PhoneNumber('123456789789')
        self.address = Address()

me = China('li','binglin')
me.address.display_address()
me.display_full_name()
me.phone_number.display_phone_number()
# 四川
# Libinglin
# 123134123123

# 调用函数修改属性
me.address.update_address('江苏')
me.phone_number.update_number('9875328787')
me.address.display_address()
me.phone_number.display_phone_number()
# 江苏
# 9875328787

9.3.3 冰淇淋小店,继承自餐馆类,添加属性,创建实例

class IceCream(Restaurant):
    def __init__(self,restautemt_name, cuisine_type):
        super().__init__(restautemt_name, cuisine_type)
        self.flavors = ['milk','cheese','mango','banana']
    
    def display_icecream_taste(self):
        for taste in self.flavors:
            print(taste+"味冰淇淋!")

my_iceCream = IceCream('哈根达斯','冰淇淋')
my_iceCream.display_icecream_taste()
#milk味冰淇淋!
# cheese味冰淇淋!
# mango味冰淇淋!
# banana味冰淇淋!

9.3.4 Admin类

# 继承自Usre类,添加privileges属性,存储一个字符串列表,编写一个show_privileges()方法,创建Admin实例
class Admin(User):
    def __init__(self,first_name, last_name, age, address, height, weight):
        super().__init__(first_name, last_name, age, address, height, weight)
        self.privileges = ['can add post','can delete post','can ban user']
    
    def show_privileges(self):
        for priv in self.privileges:
            print(priv)

Admin_ = Admin('li','binglin',22,'sichuan',178,74)
Admin_.show_privileges()
# can add post
# can delete post
# can ban user

9.4.1 使用OrderedDict类

from collections import OrderedDict
words = OrderedDict()
words['放弃'] = 'abandon'
words['能力'] = 'ability'
words['苹果'] = 'apple'
# 遍历字典
for key,value in words.items():
    print(key+":"+value)
    ```
# 9.4.2 骰子类
```python
from random import randint
class Die(object):
    def __init__(self,sides=6):
        self.sides = sides
    
    def roll_die(self):
        print(randint(1,self.sides))
#不传参,创造一个六面的骰子
my_die = Die()
for i in range(10):
    my_die.roll_die()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值