目录
一、类的属性
二、类的方法
1. 实例方法
2. 类方法
3. 自由方法
4. 静态方法
5. 保留方法
属性和方法是类对外交互所提供的两种接口方式。
一、类的属性
- 类的属性:属性是类内部定义的变量,用于描述类的一些特性参数。
- 类属性:类对象的属性,由所有实例对象所共享。
- 实例属性:实例对象的属性,由各实例对象所独享。
代码实例
class DemoClass: # 定义类对象
count = 0 # 类属性,直接在类中定义或赋值
def __init__(self, name, age):
self.name = name # 实例属性,在类内部,用self.<属性名>访问
self.age = age
DemoClass.count += 1
dc1 = DemoClass("小明", 14) # 实例对象
dc2 = DemoClass("小吴", 12) # 实例对象
dc3 = DemoClass("小张", 13) # 实例对象
print("总数:", DemoClass.count) # 类属性,统一用<类名>.<属性名>访问
print(dc1.name, dc2.name, dc3.name) # 实例属性,在类外部,用<对象名>.<属性名>访问
运行结果
二、类的方法
类的方法:方法是类内部定义的函数,用来给出类的操作方法
1. 实例方法
实例对象的方法,由各实例对象独享,是类内部定义的函数(最常用的形式)。
代码实例
class DemoClass:
def __init__(self, name):
self.name = name
def lucky(self): # 定义一个方法lucky
s = 0
for c in self.name:
s += ord(c) % 100
return s
dc1 = DemoClass("小明")
dc2 = DemoClass("小吴")
print(dc1.name,"的幸运数字是:", dc1.lucky()) # 调用lucky方法
print(dc2.name,"的幸运数字是:", dc2.lucky())
2. 类方法
类对象的方法,是与类对象相关的函数,由所有实例对象共享。
- 类方法至少包含一个参数,表示类对象,建议用cls
- @classmethod是装饰器,类方法定义所必须
- 类方法只能操作类属性和其他类方法,不能操作实例属性和实例方法
代码实例
class DemoClass:
count = 0
def __init__(self,name):
self.name = name
DemoClass.count += 1
@classmethod # 类方法使用装饰器表示
def getChrCount(cls): # 类方法只能使用类属性或其他类方法
s = "零一二三四五六七八九十多"
return s[DemoClass.count]
dc1 = DemoClass("小明")
dc2 = DemoClass("小吴")
print(dc1.getChrCount())
print(DemoClass.getChrCount())
、
3. 自由方法
类中的一个普通函数,由类所在命名空间管理,类对象独享。
- 自由方法不需要self或cls这类参数,可以没有参数
- 自由方法只能操作类属性和类方法,不能操作实例属性和实例方法
- 自由方法的使用只能使用<类名>
代码实例
"""
自由方法就是类中普通函数理解为:定义在类命名空间中的函数也可以定义在类外,习惯不同
"""
class DemoClass:
count = 0
def __init__(self,name):
self.name = name
DemoClass.count += 1
def foo():
DemoClass.count *= 100
return DemoClass.count
dc1 =DemoClass("老王")
print(DemoClass.foo())
4. 静态方法
类中的一个普通函数,由类对象和实例对象共享。
- 静态方法可以没有参数,可以理解为定义在类中的普通函数
- @staticmethod是装饰器,静态方法定义所必须
- 静态方法只能操作类属性和其他类方法,不能操作实例属性和实例方法
- 相比于自由方法,静态方法能够使用<类名>和<对象名>两种方式使用
代码实例
"""
静态方法就是类中普通函数但这类方法能够被类和对象调用
"""
class DemoClass:
count = 0
def __init__(self,name):
self.name = name
DemoClass.count += 1
@staticmethod
def foo():
DemoClass.count *= 100
return DemoClass.count
dc1 =DemoClass("小明")
print(DemoClass.foo())
print(dc1.foo())
5. 保留方法
由双下划线开始和结束的方法,保留使用,如__len__()
代码实例
class DemoClass:
count = 0
def __init__(self,name):
self.name = name
DemoClass.count += 1
def __len__(self): # Python解释器保留方法已对应,只需要编写代码即可
return len(self.name)
dc1 = DemoClass("小明")
dc2 = DemoClass("小吴的玩具")
print(len(dc1))
print(len(dc2))