属性和方法

2019-12-01  本文已影响0人  大冰S

属性和方法

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

类属性和示例属性

方法

方法和函数

相同

不同

参数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'

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

上一篇 下一篇

猜你喜欢

热点阅读