FreezeJ' Blog

pthon小知识点

2019-04-28

小知识点

issubclass() 用于判断两个类对象之间的关系(是否有继承关系)

# issubclass()
class A(object):
    pass
class B(A):
    pass
class C(object):
    pass

print(issubclass(B, A))  # True
print(issubclass(B, C))  # False
print(issubclass(B, (A, C)))  # True

isinstance() 用于判断实例对象与类对象的关系(是否有创造关系),

# isinstance()
class A(object):
    pass
class B(A):
    pass
class C(object):
    pass

a = A()
b = B()
c = C()
print(isinstance(a, A))  # True
print(isinstance(b, A))  # True  包括继承关系产生的实例对象
print(isinstance(c, A))  # False
print(isinstance(c, (A, C)))  # True

# isinstance() 可以用于判断变量的类型
a = 123
b = '123'
c = [1, 2, 3]
d = {1:1, 2:2, 3:3}
print(isinstance(a, int))  # True
print(isinstance(b, str))  # True
print(isinstance(c, list))  # True
print(isinstance(d, dict))  # True

type() 用于获取对象的类型。类对象的类型是type

class A(object):
    pass
print(type(A))  # <class 'type'>

可以使用运算符==判断某个对象的类型。对于基本数据类型,可以直接使用其类名;如果不是基本数据类型,需要使用标准库types中的定义的变量。

# 判断非基本数据类型
import types
def say_hi():
    pass

if type(say_hi) == types.FunctionType:  # 判断函数
    print('This is a function')

if type(print) == types.BuiltinFunctionType:  # 判断内置函数
    print('This is a built-in-function')


查看某个对象的引用sys.getrefcount()

# 对象引用计数
import sys
# 引用计数加一的4中情况
a = [1, 2, 3]  # 第一个引用
b = [a, 4]  # 第二个引用
c = a # 第三个引用
print(sys.getrefcount(a))  # 第四个引用(作为实参)
# 当函数执行完后,a的引用计数自动减一

pprint模块中的pprint可以使字典打印更加美观。

import pprint
class Animal(object):
    pass
pprint.pprint(Animal.__dict__)
'''
结果:
mappingproxy({'__dict__': <attribute '__dict__' of 'Animal' objects>,
              '__doc__': None,
              '__module__': '__main__',
              '__weakref__': <attribute '__weakref__' of 'Animal' objects>})
'''

列表使用insert插入元素到某个索引,可以使用del 来直接删除某个索引元素

a = [1, 2, 3]
a.insert(1, 9)  # 在索引1中插入元素9,后面元素往后挪一位
print(a)  # [1, 9, 2, 3]
del a[2]  # 删除索引2的元素,后面元素往前挪一位
print(a)  # [1, 9, 3]
Tags: Python