语法
说明
- 类名一般采用驼峰命名,一般会约定类名首字母大写
__init__
也叫构造函数,创建对象时被调用,也可以省略self
变量绑定的是被创建的对象,名称可以随意
定义类
class 类名:
"""
文档说明
"""
def __init__(self,参数):
self.实例变量 = 参数
方法成员
实例化对象
- 变量存储的是实例化后的对象地址
- 类名后面的参数按照构造函数的形参传递
class Wife:
"""
自定义老婆类
"""
# 数据
def __init__(self, name, age, sex):
# 初始化对象数据
self.name = name
self.age = age
self.sex = sex
# 行为(方法=函数)
def play(self):
print(self.name, "玩耍")
# 调用构造函数(__init__)
shang_er = Wife("双儿", 26, "女")
# 操作对象的数据
shang_er.age += 1
print(shang_er.age)
# 调用对象的函数
shang_er.play()# 通过对象地址调用方法,会自动传递对象地址.
# play(shanger)
print(shang_er)# <__main__.Wife object at 0x7f390e010f28>
实例成员
实例变量
说明
- 首次通过对象赋值为创建,再次赋值为修改
- 通常在构造函数
__init__
中创建 - 每个对象存储一份,通过对象地址访问
__dict__
对象的属性,用于存储自身实例变量的字典
lili = Wife()
lili.name = "丽丽"
lili.name = "莉莉"
lili2 = Wife("丽丽",24)
print(lili2.name)
实例方法
说明
- 至少有一个形参,第一个参数绑定调用这个方法的对象,一般命名为self。
- 无论创建多少对象,方法只有一份,并且被所有对象共享。
#定义
def 方法名称(self, 参数):
方法体
#调用
# 不建议通过类名访问实例方法
对象.方法名称(参数)
演示
class Wife:
def __init__(self, name):
self.name = name
def print_self(self):
print("我是:", self.name)
lili = Wife("丽丽") # dict01 = {"name":"丽丽"}
lili.name = "莉莉" # dict01["name"] = "莉莉"
print(lili.name) # print(dict01["name"])
lili.print_self()
print(lili.__dict__) # {"name":"丽丽"}
"""
# 支持动态创建类成员
# 类中的成员应该由类的创造者决定
class Wife:
pass
w01 = Wife()
w01.name = "莉莉"
print(w01.name)#对象.变量名
"""
"""
# 实例变量的创建要在构造函数中__init__
class Wife:
def set_name(self,name):
self.name = name
w01 = Wife()
w01.set_name("丽丽")
print(w01.name)
"""
跨类调用
写法1:直接创建对象
# 语义:老张每次创建一辆新车去
class Person:
def __init__(self, name=""):
self.name = name
def go_to(self,position):
print("去",position)
car = Car()
car.run()
class Car:
def run(self):
print("跑喽~")
lz = Person("老张")
lz.go_to("东北")
写法2:在构造函数中创建对象
# 语义:老张开自己的车去
class Person:
def __init__(self, name=""):
self.name = name
self.car = Car()
def go_to(self,position):
print("去",position)
self.car.run()
class Car:
def run(self):
print("跑喽~")
lz = Person("老张")
lz.go_to("东北")
方式3:通过参数传递
# 语义:老张用交通工具去
class Person:
def __init__(self, name=""):
self.name = name
def go_to(self,vehicle,position):
print("去",position)
vehicle.run()
class Car:
def run(self):
print("跑喽~")
lz = Person("老张")
benz = Car()
lz.go_to(benz,"东北")
类成员
类变量
#在类中,方法外
class 类名:
变量名 = 数据
#调用
类名.变量名
# 不建议通过对象访问类变量
特点
- 随类的加载而加载
- 存在优先于对象
- 只有一份,被所有对象共享
- 描述所有对象的共有数据
类方法
#定义
@classmethod
def 方法名称(cls,参数):
方法体
#调用
类名.方法名(参数)
# 不建议通过对象访问类方法
说明
- 至少有一个形参,第一个形参用于绑定类,一般命名为'cls'
- 使用@classmethod修饰的目的是调用类方法时可以隐式传递类。
- 类方法中不能访问实例成员,实例方法中可以访问类成员。
演示:支行与总行钱的关系
class ICBC:
"""
工商银行
"""
# 类变量:总行的钱
total_money = 1000000
# 类方法:操作类变量
@classmethod
def print_total_money(cls):
# print("总行的钱:", ICBC.total_money)
print("总行的钱:", cls.total_money)
def __init__(self, name,money=0):
self.name = name
# 实例变量:支行的钱
self.money = money
# 总行的钱因为创建一家支行而减少
ICBC.total_money -= money
ttzh = ICBC("天坛支行",100000)
xdzh = ICBC("西单支行",200000)
# print("总行的钱:", ICBC.total_money)
ICBC.print_total_money()
静态方法
# 定义
@staticmethod
def 方法名称(参数):
方法体
#调用
类名.方法名称(参数)
# 不建议通过对象访问静态方法
说明
- 使用
@staticmethod
修饰的目的是该方法不需要隐式传参数 - 静态方法不能访问实例成员和类成员
- 定义常用的工具函数
最后一次更新于2022-10-13 14:20
0 条评论