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值
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)