class Example(object):
def the_example(self):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Run Code Online (Sandbox Code Playgroud)
如何访问类的变量?我试过添加这个定义:
def return_itsProblem(self):
return itsProblem
Run Code Online (Sandbox Code Playgroud)
然而,这也失败了.
我正在编写一个利用多个类的程序.我有一个专门用于确定一组变量值的类.然后,我希望能够使用其他类访问这些变量的值.我的代码如下:
class ClassA(object):
def __init__(self):
self.var1 = 1
self.var2 = 2
def methodA(self):
self.var1 = self.var1 + self.var2
return self.var1
class ClassB(ClassA):
def __init__(self):
self.var1 = ?
self.var2 = ?
object1 = ClassA()
sum = object1.methodA()
print sum
Run Code Online (Sandbox Code Playgroud)
我使用classA初始化2个变量(var1和var2).然后我使用methodA来添加它们,将结果保存为var1(我认为这将使var1 = 3和var2 = 2).我想知道的是,如何让ClassB能够从ClassA获取var1和var2的值?
我在python中的某个类中编写了一个函数,人们建议我向这个函数添加一个@classmethod装饰器.
我的代码:
import random
class Randomize:
RANDOM_CHOICE = 'abcdefg'
def __init__(self, chars_num):
self.chars_num = chars_num
def _randomize(self, random_chars=3):
return ''.join(random.choice(self.RANDOM_CHOICE)
for _ in range(random_chars))
Run Code Online (Sandbox Code Playgroud)
建议的更改:
@classmethod
def _randomize(cls, random_chars=3):
return ''.join(random.choice(cls.RANDOM_CHOICE)
for _ in range(random_chars))
Run Code Online (Sandbox Code Playgroud)
我几乎总是只使用这个_randomize功能.
我的问题是:添加到classmethod装饰器的功能有什么好处?
我用3个类编写测试代码,并使用Chain of Responsibility设计模式,下面的代码
我打印print(c._abc is b._abc),答案是真的,但我原来认为两者是不同的.
然后,在第2轮,我取消注释self._abc = kwargs并评论其他3行,答案变为False.
为什么会这样?
import abc
class A:
__metaclass__ = abc.ABCMeta
_abc = {}
def __init__(self,successor=None,**kwargs):
self._successor = successor
@abc.abstractmethod
def handlerRequest(self):
pass
class B(A):
def __init__(self,successor=None,**kwargs):
self._successor = successor
print(kwargs)
# self._abc = kwargs # round 2<---uncomment here
self._abc['a'] = kwargs['a'] # round 2<---comment here
self._abc['b'] = kwargs['b'] # round 2<---comment here
self._abc['Hello'] = 'World' # round 2<---comment here
def handlerRequest(self):
if (self._successor is not None):
self._successor.handlerRequest()
print(self._abc)
class …Run Code Online (Sandbox Code Playgroud) 我想知道在使用以下方法访问同一类的方法内的类变量(dict)时性能是否有任何差异:
self.class_variable_dict.add(some_key, some_value)
Run Code Online (Sandbox Code Playgroud)
和
ClassName.class_variable_dict.add(some_key, some_value)
Run Code Online (Sandbox Code Playgroud)
显然,只要没有具有相同名称的实例变量,两者都可以工作,但是有任何理由/用例我们应该优先选择其中一个吗?
可能重复:
Python中的实例变量与类变量
这两种情况之间有什么区别?如何在Python中处理它?
EX1
class MyClass:
anArray = {}
Run Code Online (Sandbox Code Playgroud)
EX2
class MyClass:
__init__(self):
self.anArray = {}
Run Code Online (Sandbox Code Playgroud)
看起来像第一个例子中的数组被视为静态变量.Python如何处理这个问题,原因是什么?
我试图以面向对象的方式在Class和Function中传递变量列表但面临一些错误,我不明白它有什么问题我在Eclipse中使用PyDev
class Mydetails:
__details = ''
def __init__(self,details): # constructor
#self.__details['country'] = details['country']
self.__details = details
def set_element(self,details):
self.__details = details
def get_list(self,details):
return self.__details
details = ['ABC','DEF','GHI','JKL']
pdetails = Mydetails()
pdetails.set_element(details)
print(pdetails.get_list())
Run Code Online (Sandbox Code Playgroud)
Traceback (most recent call last):
File "C:\workspace\python\pythonapp\list.py", line 18, in <module>
pdetails = Mydetails()
TypeError: __init__() missing 1 required positional argument: 'details'
Run Code Online (Sandbox Code Playgroud) 我有这个:
class Klasse1:
variable1 = "haha"
print Klasse1.variable1
Run Code Online (Sandbox Code Playgroud)
还有这个:
class Klasse1:
variable1 = "haha"
Object1 = Klasse1()
print Object1.variable1
Run Code Online (Sandbox Code Playgroud)
为什么我会使用第二个(太多的代码)而不是第一个(显然更容易)?在许多网站和教程中,我看到人们为他们可以轻松获得的东西创建对象而不创建它们.