开发者学堂课程【Python 入门 2020年版:类方法和静态方法回顾】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10387
类方法和静态方法回顾
类方法和静态方法
1. 打印 name 属性
class Person(object) :
type =
‘
human
’
def _init_(self, name,age):
self.name = name
self.age = age
# 这个方法要打印 name 属性
def demo(self):
print()
print( '姓名是',self.name)
@staticmethod
def foo():
print()
p= Person( ‘zhangsan‘, 19)
p.demo() # 实例对象调用实例方法时,会自动将实例对象传递给 self
Person. demo(p)
name 属性保存在实例对象 p上的,如果想访问 name 属性就必须要能访问到 p 的内存。
如果用对象方法,self 会指向 p 的内存。如果使用静态方法,可以通过 p.name 打印,但如果更改了对象名就会出问题。
使用对象方法在实例对象调用时,会自动将实例对象传递给 self。除了实例对象调用还可以用 Person. demo(p)类对象调用实例方法,在类对象调用实例方法时需要手动将 p 传给 self。
2.访问类属性 type
class Person(object) :
type =
‘
human
’
def _init_(self, name,age):
self.name = name
self.age = age
#这个方法需要访问到类属性type
@staticmethod
def foo():
print(Person.type)
@classmethod
def bar(cls):
print(cls.type)
#静态方法可以使用类对象和实例对象调用
p.foo()
Person.foo()
#类方法可以使用类对象和实例对象调用
p.bar()
Person.bar()
静态方法能否访问到一个内存空间取决于是否有变量指向这个内存空间,所以直接通过 Person.type 即可访问,静态方法可以使用类对象和实例对象调用,所以通过 Person.foo 也可以访问。
类方法可以使用类对象和实例对象调用,无论通过什么对象调用方法都会出现一个 cls 指向类对象。
Person 和 p 都是全局变量,但是 cls 和 self 只能在函数里面使用都是一个临时的指向。
3.打印 hello world
class Person(object) :
type =
‘
human
’
def _init_(self, name,age):
self.name = name
self.age = age
# 这个方法只需要打印 hello world
@staticmethod
def foo():
print( 'hello world")
他既没有用到实例对象里的属性也没有用到类对象的属性所以直接打印即可。