一 成员
成员共分为三类
1.变量
实例变量(字段)
-公有实例变量
-私有实例变量
类变量(静态字段)
-公有类变量
-私有类变量
###########在变量前加双下划线,就为私有变量如self.__name=food1, __food='红烧肉'###########
###########公有变量既可以在外部访问,也可以类内部访问; 私有变量只可以内部访问################
####################私有变量几乎用不到###############################
例:
class Foo:
#类变量
food = '红烧肉'
def __init__(self, food1):
#实例变量
self.name = food1
def drink(self):
pass
obj1=Foo('大盘鸡')
obj2=Foo('凉皮')
Foo.food
易错点
########类变量的访问,即可通过对象进行(可访问,可赋值,但不能在类中修改),也可通过类进行(即可访问,又修改)##########
########实例变量的访问只可通过对象进行(既能访问,也可修改)###############
练习题:
obj1.food = '烧烤'
print(obj1.food) #烧烤 #####可以访问,可以赋值,但是不能从根生修改类变量#####
print(obj2.food) #红烧肉
规则: 实例变量的使用对象访问,即obj1.food1
类变量使用类进行访问, 即Foo.food
什么时候用类变量?
当所有对象中有共同字段时,且改动相同,可将字段提取为静态字段
2.方法
-实例方法
-静态方法
-类方法
例子:
class Foo:
def __init__(self,name):
self.name=name
#实例方法:
def func(self):
print(self.name)
#静态方法:(无需使用对象中已经封装的值)
@staticmethod
def func1(x, y):
return x+y
#类方法:在当前方法中使用到当前的类,就可使用类方法
@classmethod
def func3(cls,x,y):
return x+y
#实例方法的调用
obj = Foo('红烧肉')
obj.func()
#静态方法的调用
Foo.func1(1,2) #推荐
obj.func1(1,2)
#类方法的调用
Foo.func3(1,2)
###############################实例方法############################
正常方法
必要性:要调用构造方法中的值
###############################静态方法############################
1 书写
-在方法上方写入@staticmethod
-参数可有可无
2 调用时:
-类. 方法名() #推荐
-对象.方法名()
3 什么时候使用
方法无需使用对象已经封装的值
###############################类方法############################
1 书写
-在方法上方写入@classmethod
-参数至少有一个cls
2 调用时:
-类. 方法名() #默认会将当前的类传到参数中
-对象.方法名()
3 什么时候使用
在当前方法中使用到当前的类,就可使用类方法
************方法也有公有私有之分,书写:前面加__,调用:只能内部调用,不能外部调用**************
3.属性(通过方法改造出来的)
#定义
class Foo:
# 属性:
@property
def func1(self):
return 1
#调用
obj=Foo
obj.func1
总结:
1.书写
在方法上方加@property
参数只有一个self
2.调用时
无需加括号,直接 类.函数名
3.什么时候使用
对于简单的方法,无需传参,并且有返回值时