美文网首页
属性和方法

属性和方法

作者: 大冰S | 来源:发表于2019-12-01 17:51 被阅读0次

    属性和方法

    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'

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

    相关文章

      网友评论

          本文标题:属性和方法

          本文链接:https://www.haomeiwen.com/subject/phozwctx.html