Python系统学习1-9-类一之类语法

一、类之初印象

1、类就是空表格,将变量(列名)和函数(行为)结合起来

2、创建对象,表达具体行

3、创建类就是创建数据的模板

        --操作数据时有提示

        --还能再组合数据的行为

        --结构更加清晰

4、类的内存分配

Python系统学习1-9-类一之类语法_第1张图片

 5、练习

"""
    参照day08/homework/exercise01
    创建餐厅类
        -- 变量:字典的键
        -- 函数:打印
"""
# 类统一了字典所有key,并提供了相关函数
class Restaurant:
    def __init__(self, city, name="", remark=0, money=0):
        self.city = city
        self.name = name
        self.remark = remark
        self.money = money

    def display(self):
        print("%s在%s地区,点评人数%s,人均消费%s元." % (
            self.name, self.city, self.remark, self.money))

# 创建对象
# --(1)根据实例变量开辟空间
# --(2)执行__init__函数
xqwct = Restaurant("北京", "星期五餐厅", 2847, 180)
tmz = Restaurant("北京","铁木真",3497,104)
print(xqwct.remark)
# 通过对象调用函数,自动将对象作为参数传递给self
xqwct.display() # display(xqwct)
tmz.display()

Python系统学习1-9-类一之类语法_第2张图片

 二、类语法

(1)类定义

1、代码
class 类名:
    """
    文档说明
    """
    def __init__(self,参数):
     self.实例变量 = 参数
    def 实例方法(self,参数):
        pass
2、说明
        -- 类名所有单词首字母大写
        -- init 也叫构造函数,创建对象时被自动调用,也可以省略。
        -- self 变量绑定的是被创建的对象,名称可以随意 self就是对象
3、实例化
      代码:对象名 = 类名 ( 数据 )
说明:
        -- 对象名存储的是实例化后的对象地址
        -- 类名后面的参数按照构造函数的形参传递(__init__函数)

(2)实例成员

1、实例变量
定义:对象 . 变量名(self.变量名)
调用:对象 . 变量名
说明 通常在构造函数 (__init_) 中创建,首次通过对象赋值为创建,再次赋值为修改.
            每个对象存储一份,通过对象地址访问
__dict__ :对象的属性,用于存储自身实例变量的字典。
2、实例方法

         def 方法名(self,参数):

                方法体(通过“self.变量名"访问实例变量)

调用:对象名.方法名(变量)

说明:至少有一个形参,第一个参数绑定调用这个方法的对象 , 一般命名为self
           无论创建多少对象,方法只有一份,并且被所有对象共享。
# 类中self就是对象名
# 类外自己命名的为对象名
class Epidemic:
    def __init__(self, region):
        # 创建实例变量
        self.region = region
        self.display()
    # 定义实例方法
    def display(self):
        print(self.region)

bj = Epidemic("北京")
bj.display()

# 读取实例变量
print(bj.region)
# python语言将实例变量存入字典
print(bj.__dict__)  # {'region': '北京'}

# Python支持在类外创建实例变量,不建议使用
"""
class Epidemic:
    pass
sh = Epidemic()
sh.region = "上海" # 当前对象有此实例,其他对象无
print(sh.region)
dd = Epidemic()
# print(dd.region) 错误
"""

# 建议在__init__ 中定义实例变量
"""
class Epidemic:
    def set_name(a, name):  # self 可以为任意命名为其他
        # 创建实例变量
        a.name = name
bj = Epidemic()
bj.set_name("北京")
print(bj.name)
print(bj)  # 打印自定义对象,输出为真实内存地址
"""
3、类实例化内存分配

Python系统学习1-9-类一之类语法_第3张图片

 Python系统学习1-9-类一之类语法_第4张图片

 Python系统学习1-9-类一之类语法_第5张图片

 (3)跨类调用

 跨类调用语法1:直接创建对象

        语义:XX每次去东北都开一辆新车,因为Car()为局部变量

        通俗:每次用新的

class Person:
    def __init__(self, name):
        self.name = name

    def driver(self):
        print(self.name,"驾驶去东北")
        car = Car()
        car.run()
        
class Car:
    def run(self):
        print("骑车在行驶")


lz = Person("老张")
ll = Person("老李")
lw = Person("老王")

lz.driver()  # 老张驾驶新车去东北
ll.driver()  # 老李驾驶新车去东北
lw.driver()  # 老王驾驶新车去东北
lz.driver()  # 老张驾驶新车去东北
 跨类调用语法2:在构造函数中创建对象

        语义:XX每次去东北都开自己的车,__init__只执行一次

        通俗:每次用旧的

class Person:
    def __init__(self, name):
        self.name = name
        self.car = Car() # 每个对象一个
    def driver(self):
        print(self.name,"驾驶去东北")
        # car = Car() # 多次就是多个
        self.car.run()

class Car:
    def run(self):
        print("骑车在行驶")


lz = Person("老张")  # __init__ 造车,只有一次
lz.driver()
lz.driver()

 跨类调用语法3:通过参数传递对象,建议使用

        语义:XX每次去东北都乘交通工具

        通俗:每次用的时候再选择

class Person:
    def __init__(self, name):
        self.name = name


    def driver(self,vehicle):
        print(self.name,"驾驶去东北")
        vehicle.run()

class Car:
    def run(self):
        print("骑车在行驶")


lz = Person("老张")  # __init__ 造车,只有一次
car = Car()
# 没有定义类时,确定关系
# 而是在用类时,确定关系
lz.driver(car)

你可能感兴趣的:(python基础学习,python,学习,开发语言)