class Foo:
#类变量(静态字段)
country = "中国"
def _init_(self,name)
实例变量(字段)
self.name = name
def func(self):
pass
#知识点一:
'''
准则:
实例变量(字段)访问时,使用对象访问,既:obj1.name
类变量(静态变量)访问时,推荐使用类方法,既:Foo.country (实在不行,才使用对象)
obj1 = Foo('李光辉')
obn2 = Foo("王岗")
print(obj1,name)
print(Foo.country)
# 知识点一:易错点
"""
obj1 = Foo('季红')
obj2 = Foo('王晓东')
# 练习1
# obj1.name = 'alex'
# print(obj1.name) # alex
# print(obj2.name) # 王晓东
# 练习2
# obj1.country = '美国'
# print(obj1.country) # 美国
# print(obj2.country) # 中国
# 练习3
# Foo.country = '美国'
# print(obj1.country) # 美国
# print(obj2.country) # 美国
"""
# 知识点一: 什么时候用类变量?
# 当所有对象中有共同的字段时且要改都改要删都删时,可以将 实例变量(字段) 提取到 类变量(静态字段)
'''
# ######################## 公有实例变量(字段) ########################
class Foo:
def __init__(self, name):
self.name = name
self.age = 23
def func(self):
print(self.name)
obj = Foo("张娜拉")
print(obj.name)
print(obj.age)
obj.func()
张娜拉
23
张娜拉
class Foo:
def __init__(self, name):
self.__name = name
self.age = 22
def func(self):
print(self.__name)
obj = Foo("杰森斯坦森")
print(obj.age)
obj.func()
22
杰森斯坦森'''
# ######################## 类变量(静态字段) ########################
"""
class Foo:
country = "中国"
def __init__(self):
pass
def func(self):
# 内部调用
print(self.country)
print(Foo.country) # 推荐
# 外部调用
print(Foo.country)
obj = Foo()
obj.func()
"""
# ######################## 私有类变量(私有静态字段) ########################
"""
class Foo:
__country = "中国"
def __init__(self):
pass
def func(self):
# 内部调用
print(self.__country)
print(Foo.__country) # 推荐
# 外部无法调用私有类变量
# print(Foo.country)
obj = Foo()
obj.func()
'''
'''
class Base():
_secret = "做一些不可描述的事情"
def zt(self):
pass
# print(Base._secret)
class Foo(Base):
def func(self):
print(self._secret)
print(Foo._secret)
obj = Foo()
obj.zt()
'''
class Foo(object):
def __init__(self, name):
self.name = name
#实例方法
def func(self):
print(self.name)
#静态方法,如果方法无需使用队形中封装的值,name可以使用静态方法
@staticmethod
def display(a1, a2):
return a1 + a2
obj = Foo(" 蒙娜丽莎的微笑")
obj.func()
ret = Foo.display(1, 3)
print(ret)
蒙娜丽莎的微笑
4
总结
1. 编写时:
- 方法上分写 @staticmethod
_方法参数可有可无
2. 调用时:
- 类.方法名() ***
- 对象.方法名()
3. 什么时候写静态方法?
- 无需调用对象中已封装的值,那么就可以使用静态方法
class Foo(object):
def __init__(self, name):
self.name = name
def func(self):
print(self.name)
@staticmethod
def display(a1,a2):
return a1 + a2
@classmethod
def show(cls, x1, x2):
print(cls, x1, x2)
Foo.show(1, 8)
print(Foo.display(1, 3))
执行类方法
总结
1.定义时:
- 方法上方写: @classmethod
- 方法的参数: 至少有一个cls参数
2.执行时:
-类名,方法名() #默认会将当前类传到参数中.
3.什么时候用?
-如果在方法中会使用到当前类,那么就是用类方法
'''