属性和方法

属性和方法

class PyClass:
... lesson = 'python'
... def init(self, name):
... self.name = name
...
PyClass.lesson
'python'

lesson 被称作类属性也叫做静态属性,可以通过类名调用

PyClass.book = 'learn python'
dir(PyClass)
['class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref', 'book', 'lesson']

类属性可以被创建

name 被称作实例属性

p = PyClass('su')
dir(p)
['class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref', 'book', 'lesson', 'name']

修改实例属性不会影响类属性,也不会影响其他实例的同名属性的值

p.book = 'learn java'
p.book
'learn java'
del p.book
p.book
'learn python'
del p.book
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: book
del PyClass.book
del p.book
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: book

类属性和示例属性

方法

方法和函数

相同

  • 使用关键词def
  • 使用return语句(除init方法除外)

不同

  • 方法必须写在类中
  • 方法的第一个参数必须是self

参数self引用了实例

class Foo:
... def method(self, x):
... return x**2
...
f = Foo()
f.method(2)
4
Foo.method(f,3)
9
Foo.method(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: method() missing 1 required positional argument: 'x'

实例调用方法时默认隐式传入了实例对象作为第一个参数
类对象调用方法时,需传入第一个实例对象参数

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容