Python获取类变量以及实例变量

Python获取类变量以及实例变量的方法,单一获取类变量或者实例变量很简单,但是同时获取两个变量需要对类的操作非常的熟悉,这里记录一种方法实现。

定义一个简单的类:

1
class Person:
2
    name = 'Joynice'
3
    age = 18
4
5
    def __init__(self):
6
        self.sex = '男'
7
        self.job = '程序员'

0x01 获取类变量

  • 直接访问
    1
    name = Person.name  #Joynice
  • dict访问
    1
    name = Person.__dict__.get('name') #Joynice
  • getattr()访问
    1
    name = getattr(Person, 'name') #Joynice

0x02 获取实例变量

  • 实例后获取实例变量,同时也能获得类变量
    1
    sex = Person().sex #男
    2
    name = Person().name # Joynice
  • 实例后通过dict获得,但是这种方法获得不了类变量
    1
    sex = Person().__dict__.get('sex') #男
    2
    name = Person().__dict__.get('name') #None
  • getattr()访问实例对象中的实例变量,同时也能获得类变量
    1
    sex = getattr(Person(), 'sex') #男
    2
    name = getattr(Person(), 'name') #Joynice

0x03 同时返回类变量和实例变量

通过dict()获取实例后的所有变量

1
class Person:
2
    name = 'Joynice'
3
    age = 18
4
5
    def __init__(self):
6
        self.sex = '男'
7
        self.job = '程序员'
8
9
    def keys(self):  #类自动运行keys方法,可以设置需要返回变量的名称
10
        return ['name', 'age', 'sex', 'job']
11
12
    def __getitem__(self, item):
13
        return getattr(self, item)  #通过getattr(获取对应的值)
14
15
dict(Person())
16
#{'name': 'Joynice', 'age': 18, 'sex': '男', 'job': '程序员'}

0x04 总结

实例变量只有类实例后,才能获得,类变量是公有的,但是类实例化访问类变量,只是类实例中复制的一份类变量,进行操作不会影响类本身。