一、类的定义
'''
class 类名():
类体
'''
class Person(object):
pass
二、类中成员的定义:
class Person(object):
#属性
name = "tom"
age = 18
height = 180
# 方法
def eat(self,food):
print(self.name + "eating" + food)
def run(self):
print(self.name + "runing")
'''
类的定义包括成员变量(属性)定义、成员方法的定义
成员变量: 定义同普通 变量相同都遵循标识符命名规范
成员函数: 同普通函数定义基本相同,只是传参时候,第一个参数必须是该对象本身(一般是self 但是不是必须的,可以是其他合法的标识符 同 java 、c++ 中 this作用一样,表示当前对象)
'''
三、创建对象:
'''
变量名 = 类名()
说明:创建对象实际上就相当于定义了一个自定义的变量,()不能省略
'''
class Person(object):
name = "tom"
age = 18
p1 = Person()
# 这里创建了一个Person的实例化对象,p1 为该对象的一个引用, 与普通变量定义相同
num = 10
# python 一切皆对象 10 也是一个对象 num 则是该对象的一个引用
'''
说明: 定义变量(实例化对象) 实际上是在内存中开辟存储空间的过程,实际的对象存储在堆中,而该对象的引用存放在栈中
'''
四、类属性与实例属性
'''
类属性: 直接定义在类中,所有通过该类创建的对象都可以访问该属性、随着类出现而出现
实例属性: 只属于某一个对象,只有当前对象才能访问该属性,随着对象出现而出现
'''
class Person(object):
# 类属性
name = "tom"
age = 18
# 限制绑定
__slots__ = ("name","age",)
def __init__(self,name)
# 实例属性 定义在构造函数中或者动态绑定
self.name = name
p = Person("123")
# 对象属性动态绑定 只影响该对象
p.school = "北大"
# 类属性动态绑定 影响到类 实例化的所有对象
Person.school = "清华"
# 通过 __slots__ = 元祖 限制 只能动态绑定该元祖中的字段
'''
关于类属性与实例属性的几点说明:
1.实例属性: 对象.实例属性 类属性: 类名.类属性 或者 对象.类属性
2.优先级不同:如果类属性 和实例属性重名,则通过对象访问,优先访问的是实例属性
3.内存出现的时机不同: 类属性随着类的加载而出现,而实例属性随着对象的出现而出现
4.使用场景不同:类属性用来定义多个对象共同的特征,实例属性用来定义每个对象特有的特征
'''
五、构造函数与析构函数
'''
构造函数:__init__()
调用时机:创建对象的时候,自动被调用
作用:构建对象,为对象的属性初始化
'''
class Person(object):
def __init__(self,name,age):
self.name = name;
self.age = age
'''
析构函数:__del__()
调用时机:对象被销毁时候 自动被调用
作用:销毁对象
'''
class Person(object):
def __del__(self):
print("析构函数被执行了")