【循序渐进学Python】面向对象知多少——类成员和实例(对象)成员
学习了面向对象的继承以后,相信大家对类和对象已经有了初步的了解,今天我们来学习类成员和实例(对象)成员.
类成员
- 类的属性和方法称之为类的成员
- 类成员指的是这个成员在外部的访问可以通过类的名称或者该类实例的对象进行访问
类属性
- 直接在类中定义的属性称为类属性
优点:
-
记录的某项数据始终保持一致时,则定义类属性
-
实例属性要求每个对象为其单独
-
开辟一份内存空间来记录数据,而类属性为全类所共有,仅占用一份内存空间,更加节省内存空间
类方法
- 使用@classmethod修饰器进行修饰的方法叫做类方法
实例(对象)成员
- 对象的属性和方法称之为对象的实例成员
实例(对象)属性
- 在__init__(self)魔法方法中定义的属性称为实例属性
添加实例(对象)属性的格式
- 此处的添加属性指的是给类实例的对象添加一个属性
对象名.属性名=属性值
获取实例(对象)属性的格式
对象名.属性名
实例(对象)方法:
- 定义在类中,没有修饰器的方法叫做实例方法
- 实例(对象)方法指的是这个类中的成员如果要使用和访问只能通过,将类进行实例成一个对象,然后通过对象去访问这个成员
- 实例成员无法通过类名直接访问,不管是方法还是属性.
添加实例(对象)方法
- 在类的内部直接声明函数而且函数第一个参数一般自动为self(这个参数具有特殊的含义功能)
静态方法
- 使用@staticmethod修饰器来进行修饰方法,静态方法不需要定义参数.
- 静态方法可以通过类或对象进行访问
作用
- 例如类里面有一些功能,这个功能和实例对象其实并没有任何关系
- 但是需要让这个功能称为这个类的成员,可以采用静态或者类方法,访问可以直接通过类或对象进行访问
注意
- 通过类创建对象,然后给对象添加属性,而后才能获取对象的已有属性
案例:
class Person(object):
# 类属性
country = "中国"
def __init__(self):
# 实例属性
self.name = "李四"
# 实例方法
def func(self):
return self.name
# 类方法
# 修饰器
@classmethod
def get_country2(cls):
return cls.country
# 静态方法
@staticmethod
def get_country():
return Person.country
# 类的实例化
p = Person()
# 通过对象访问类方法
print(p.get_country2())
# 通过类访问类方法
print(Person.get_country2())
# 通过对象访问类属性
print(p.country)
# 通过类访问类属性
print(Person.country)
# 通过对象访问实例属性
print(p.name)
# 通过类不能直接访问实例属性
# 通过对象访问实例方法
print(p.func())
# 通过类不能直接访问实例方法
# 通过对象访问静态方法
print(p.get_country())
# 通过类访问静态方法
print(Person.get_country())