目录
- 成员
- 字段介绍
- 方法介绍
- 属性
1. 成员
成员介绍
类的成员可分为字段、方法以及属性。
2. 字段介绍
前一篇文章中的属性,更准确来说被称为字段。字段又主要可以分为普通(实例)字段与静态(类)字段。
- 普通字段(实例属性)
普通字段属于对象,保存在对象中,只能通过对象访问。
定义:self.字段名称
访问:self.字段名称 或 对象.字段名称
但是这样实现,会有相应的问题。比如说,普通字段保存在对象中,也就是说,当存对象的字段值相同时,仍然使用普通字段便会造成我们内存的浪费。
- 静态字段(类属性)
静态字段属于类,保存在类中。在创建时,仅创建一份,并且所有对象都共享静态字段。执行时可以是类访问也可以是对象访问。
定义:直接在类中定义
访问:类名.字段名称 或 self.字段名称 或 对象.字段名称 - 总结
在实际开发中,如果字段的值是固定的,不随对象的改变而改变。那就使用静态字段(类属性),这样有利于节省内存的消耗。而如果字段的值随对象的改变而改变,就使用普通字段(实例属性)。
3. 方法介绍
类的方法主要可分为普通方法(实例方法),类方法,静态方法。
普通方法(实例方法)
- 普通方法保存在类中,在实例化对象后,一般通过对象调用。第一个参数必须为系统自建参数,默认为self,代指对象本身。
注意:self仅仅是变量名。使用其它也可,但最好不要修改。- 应用场景
当方法中需要使用普通字段(实例对象)时,通常使用普通方法。
- 应用场景
- 静态方法
静态方法通过在方法上面添加@staticmethod
装饰器定义,保存在类中;
静态方法不需要传入self参数,即使传入了self参数也并不像普通方法那样代指对象本身,仅仅是一个普通的形参。
静态方法的调用虽然可以通过对象调用,但一般由类调用。- 应用场景
静态方法的参数并不代表对象这一特点,使静态方法在类中使用起来更像一个单纯的函数。完全可以将静态方法放在类的外部,当成函数使用。但是放在类中,便于使用与维护。
- 应用场景
- 类方法
类方法通过在方法上面添加@classmethod
装饰器,保存在类中;
类方法不需要传入self。但有一个系统自建参数为cls,cls代指类本身;
类方法一般通过类调用,也可通过对象调用。
定义及访问如下:
class Demo:
@classmethod # 通过@classmethod装饰器将方法转为静态
def clasmd(cls): # 自建cls参数 代指 当前类
print(cls) # <class '__main__.Demo'>
d = Demo()
Demo.clasmd() # 通过 类名 调用
-
总结
4. 属性
在实际开发中,为了简便,当想访问方法以属性的访问形式时,就可以通过在方法上面添加@property装饰器,达到该效果。
定义及访问如下:
class Demo:
def __init__(self):
self.name = "rose"
@property
def test(self):
print(self.name)
d = Demo()
d.test # 通过@property 以 普通属性 形式访问 普通方法 (不带方法的括号,即不是调用)
# rose
d.test()
# rose
# TypeError: 'NoneType' object is not callable
- 注意:以上@property只相当于一个只读属性,也就是说,仅能访问test函数的内容。
- 用法示例:
需求:
1.通过传参去改变self.name的值
2.删除掉self.name
具体实现代码如下:
class Demo:
def __init__(self):
self.name = "rose"
@property
def test(self): # 只可访问模式
print(self.name)
@test.setter # d.set_test = "jack"
def test(self,para):
self.name = para
print(self.name)
@test.deleter
def test(self): # del d.test
del self.name
print(self.name) # 报错 self.name已被删除
d = Demo()
d.test # 通过@property 只读模式
# 改变self.name的值
d.test = "jack" # 给方法传参 以 赋值方式 会触发@test.setter
# 删除self.name
del d.test # del 会 触发 @test.deleter
网友评论