Python 创建和使用类

创建和使用类

  • 类:首字母大写
# 案例
class Dog():
    '''一次模拟小狗的简单尝试'''
    
    def __init__(self,name,age):
        '''初始化属性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__()
  • 每当根据类创建新实例时,Python都会自动动运行它。
  • 类中的函数称为方法,有关函数的一切适用于方法,唯一重要的差别是调用方法的方式。
  • 开头和结尾各有两个下划线,形参self必不可少,必须位于形参的前面,使用__init__创建实例时,将自动传入实参self,每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,它让实例能够访问类中的属性和方法。
  • 以 self 为前缀的变量都可供类中的所有方法使用,还可以通过类的任何实例来访问这些变量

在Python 2.7中创建类

  • 在括号内包含单词object
# 案例
class ClassName(object):
    --ship--

根据类创建实例

# 案例
class Dog():
   # 一次模拟小狗的简单尝试 
    def __init__(self, name, age):
   # 初始化属性 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 is " + str(my_dog.age) + " years old.")

my_dog.name
My dog's name is Willie.
My dog is 6 years old.





'willie'

1.访问属性

  • 通过实例访问的变量称为属性
  • 使用句点表示法

2.调用方法

  • 根据类创建实例后,可以使用句点表示法,调用Dog类中定义的任何方法
# 案例
class Dog():
   # 一次模拟小狗的简单尝试 
    def __init__(self, name, age):
   # 初始化属性 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()
Willie is now sitting.
Willie rolled over!

3.创建多个实例

  • 根据类创建任意数量的实例
# 案例
class Dog():
   # 一次模拟小狗的简单尝试 
    def __init__(self, name, age):
   # 初始化属性 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('lucy', 3)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")
my_dog.sit()

print("\nYour dog's name is " + your_dog.name.title() + ".")
print("My dog is " + str(your_dog.age) + " years old.")
your_dog.sit()
My dog's name is Willie.
My dog is 6 years old.
Willie is now sitting.

Your dog's name is Lucy.
My dog is 3 years old.
Lucy is now sitting.

练习

# 1.餐馆
# 创建一个名为 Restaurant 的类,其方法 __init__() 设置两个属性: restaurant_name 和 cuisine_type 。创建一个名
# 为 describe_restaurant() 的方法和一个名为 open_restaurant() 的方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。
# 根据这个类创建一个名为 restaurant 的实例,分别打印其两个属性,再调用前述两个方法。
class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.restaurant_name = restaurant_name.title()
        self.cuisine_type = cuisine_type
    def describe_restaurant(self):
        print(self.restaurant_name + " server wonderful " + self.cuisine_type + ".")
    def open_restaurant(self):
        print(self.restaurant_name + " is open. Come on in!" )
restaurant = Restaurant('the mean queen', 'pizza')
print(restaurant.restaurant_name)
print(restaurant.cuisine_type)
restaurant.describe_restaurant()
restaurant.open_restaurant()
The Mean Queen
pizza
The Mean Queen server wonderful pizza.
The Mean Queen is open. Come on in!
# 2.三家餐馆
# 针对练习1,创建三个实例,并对每个实例调用方法 describe_restaurant()
class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.restaurant_name = restaurant_name.title()
        self.cuisine_type = cuisine_type
    def describe_restaurant(self):
        print(self.restaurant_name + " server wonderful " + self.cuisine_type + ".")
    def open_restaurant(self):
        print(self.restaurant_name + " is open. Come on in!" )
restaurant1 = Restaurant('the mean queen', 'pizza')
restaurant2 = Restaurant('yong he', 'mi')
restaurant3 = Restaurant('li xian sheng', 'jiu')
restaurant1.describe_restaurant()
restaurant2.describe_restaurant()
restaurant3.describe_restaurant()
The Mean Queen server wonderful pizza.
Yong He server wonderful mi.
Li Xian Sheng server wonderful jiu.
# 3.用户
# 创建一个名为 User 的类,其中包含属性 first_name 和 last_name ,还有用户简介通常会存储的其他几个属性。在类 User 中定义一个名
# 为 describe_user() 的方法,它打印用户信息摘要;再定义一个名为 greet_user() 的方法,它向用户发出个性化的问候。
#创建多个表示不同用户的实例,并对每个实例都调用上述两个方法
class User():
    '''每个与类关联的方法调用都自动传递实参self,它是指向实例本身的引用,让实例能够访问类中的属性和方法'''
    def __init__(self,first_name,last_name,username,email,location):
        '''获取存储在形参中的值,并存储到变量中,然后该变量关联到当前创建的实例中'''
        '''以self为前缀的变量都可供类中的所有方法使用'''
        self.first_name = first_name
        self.last_name = last_name
        self.username = username.title()
        self.email = email
        self.location = location
    def describe_user(self):
        print("姓名:" +self.first_name + self.last_name)
        print("用户名:" + self.username)
        print("邮件:" + self.email)
        print("地址:" + self.location)
    def greet_user(self):
        print("欢迎尊敬的用户:" + self.username +"!" +"\n" )
 
user1 = User('张','三','zhang san','zhangsan@qq.com','北京')
user1.describe_user()
user1.greet_user()
user2 = User('李','四','li si','lisi@qq.com','杭州')
user2.describe_user()
user2.greet_user()
user3 = User('王','二小','wang er xiao','wangerxiao@qq.com','西安')
user3.describe_user()
user3.greet_user()
    
姓名:张三
用户名:Zhang San
邮件:zhangsan@qq.com
地址:北京
欢迎尊敬的用户:Zhang San!

姓名:李四
用户名:Li Si
邮件:lisi@qq.com
地址:杭州
欢迎尊敬的用户:Li Si!

姓名:王二小
用户名:Wang Er Xiao
邮件:wangerxiao@qq.com
地址:西安
欢迎尊敬的用户:Wang Er Xiao!
posted @ 2022-04-30 08:35  野哥李  阅读(15)  评论(0编辑  收藏  举报  来源