Python细枝末节个人知识记录

Python细枝末节个人知识记录,第1张

from x import * 可以选择哪些不被引入

不能引入x.py中前面带下划线的变量,如:_y=10
可以定义 __all__变量指示哪些变量可以引入,如 __all__ =[‘a’, ‘lt’]

dir(module) 可以显示module对象所有的方法

如果类中的变量不想让用户直接修改,可以将变量定义为内部属性,如:

class account:
	def __init__(self, name):
		self.__name = name
	def rename(self, name):
		self.__name = name
acct = account(name='wang')
print(acct.__name)  #AttributeError,无此变量
print(acct._account__name)  # 'wang'
acct._account__name = 'zhang'  # 只能通过_类名__属性名修改,不推荐

如果像让用户简易的获得,但不让用户修改类名:

class account:
	def __init__(self, name):
		self.__name = name
	@property
	def name(self):
		return self.__name
acct = account('wang')
print(acct.name) # 调用name方法,并且通过@property外部属性直接返回结果
acct.name = 'zhang'  # AttributeError,不允许直接赋值,只能通过方法赋值

类中的__repr__函数可以写这个类的描述,在直接print(类对象)的时候会调用__repr__

class account:
	def __init__(self, name):
		self.__name = name
	def __repr__(self):
		return '这是一个调用函数'
	@property
	def name(self):
		return self.__name
acct = account('wang')
print(acct)  # 这是一个调用函数

静态方法: @staticmethod,可以让类中的某个方法取消绑定状态,此方法不再和某一个对象进行绑定

class account:
	def __init__(self):
		pass
	@staticmethod
	def add(x, y):
		return x + y
account.add(1,2) # 3
acct = account()
acct.add(1,2) # 3

类方法: @classmethod,让方法第一个参数指向当前类,并不特指某一个对象,也可以理解为取消绑定状态

class account:
	def __init__(self):
		pass
	@classmethod
	def default(clz): # clz == account
		return clz()
acct = account.default() # 等价于 acct = account()

可通过acct.__dict__ 或者 vars(acct) 来获取acct中的实例。


只能获得实例的信息,而不能直接获得类中不属于实例的信息

class account:
	y = 20
	def __init__(self, x):
		self.x = x
acct = account(10)
acct.__dict__   # {'x': 10}  # 无法获得y的信息
vars(acct)  # {'x': 10}
acct.y  # 20  在实例上找不到属性时,python会继续向上找类空间,找到则输出。


acct.y = 25 # 这种 *** 作会直接在实例上额外创建属性y,而不会修改类空间中的y account.y = 25 # 这个 *** 作才会修改类空间中的y,同时会修改该类所有实例的类y值

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/571674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存