一、类之初印象
1、类就是空表格,将变量(列名)和函数(行为)结合起来
2、创建对象,表达具体行
3、创建类就是创建数据的模板
--操作数据时有提示
--还能再组合数据的行为
--结构更加清晰
4、类的内存分配
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()
二、类语法
(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、类实例化内存分配
(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)