English 中文(简体)
(千分数) 粉碎——或新习惯从 j中学习吗?
原标题:(Usage of Class Variables) Pythonic - or nasty habit learnt from java?

豪尔赫·扎列斯:以下法典只是 mo弄我想要做的事情,但应该说明我的问题。

我愿知道,这是否是 d的骗局,或者说是做事的有效和隐蔽的方式:基本上,我制造了各种事件,但我需要跟踪所有事件的静态数据。

class Myclass:
        counter=0
        last_value=None
        def __init__(self,name):
                self.name=name
                Myclass.counter+=1
                Myclass.last_value=name

使用这一简单类别的一些产出表明,所有工作都在按我的期望进行:

>>> x=Myclass("hello")
>>> print x.name
hello
>>> print Myclass.last_value
hello
>>> y=Myclass("goodbye")
>>> print y.name
goodbye
>>> print x.name
hello
>>> print Myclass.last_value
goodbye

因此,这是做这种事情的普遍可以接受的方法,还是反家长?

[例如,我感到不太高兴的是,我显然能够在(好)和(坏)类别外划出反射线;也不想从阶级代码本身中使用全名空间Myem,只是看着大事;最后,我最初把价值设定为无名——也许通过这样做会打上固定型语言吗?]

I m 使用了<2.6.2 ,而且该方案已经完全就绪。

最佳回答

你们可以通过将守则分成两门别类来解决这一问题。

第一类是你试图制造的物体:

class MyClass(object):
    def __init__(self, name):
        self.Name = name

第二类将制造物体并跟踪其:

class MyClassFactory(object):
    Counter = 0
    LastValue = None

    @classmethod
    def Build(cls, name):
        inst = MyClass(name)
        cls.Counter += 1
        cls.LastValue = inst.Name
        return inst   

这样,你就可以根据需要创建新班级,但有关创建班级的信息仍然正确。

>>> x = MyClassFactory.Build("Hello")
>>> MyClassFactory.Counter
1
>>> MyClassFactory.LastValue
 Hello 
>>> y = MyClassFactory.Build("Goodbye")
>>> MyClassFactory.Counter
2
>>> MyClassFactory.LastValue
 Goodbye 
>>> x.Name
 Hello 
>>> y.Name
 Goodbye 

最后,这种办法避免了隐藏类别变量的问题,因为MyClass公司不了解制造这些变量的工厂。

>>> x.Counter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError:  MyClass  object has no attribute  Counter 
问题回答

我认为,等级变量完全是灰色的。

只是看一看一去。 案例变量可以掩盖一个类别变量:

x.counter = 5  # creates an instance variable in the object x.
print x.counter  # instance variable, prints 5
print y.counter  # class variable, prints 2
print myclass.counter # class variable, prints 2

同上。 国有。 班级。 变数。

它 s夜,因为这个班子现在有特殊特征。

国有类别划分了2(2)项无关的责任:制造物体的状况和制造物体。 不要把责任混为一谈,因为“种子”同它们共同归属。 举例来说,计算制造物体是工厂的责任。 所制造的物体完全没有相关责任(很容易从问题中推断出)。

另外,请使用“高级案件名称”。

class MyClass( object ):
    def __init__(self, name):
            self.name=name

def myClassFactory( iterable ):
   for i, name in enumerate( iterable ):
       yield MyClass( name )

工厂目前是工厂的一部分,应维持国家和计价。 在一个单独的工厂里。

[为了民俗游戏法,这一条缩短了。 但这一点不是这样。 问题在于这一类别不再具有州性。]

从问一下我一等事件是如何制造的,这并不清楚。 由于缺乏任何cl,在如何使用工厂方面,只字不提。 一种可恶之处是通常的pri。 也许通过清单或档案或其他一些可变的数据结构加以变造。

另外,对于从贾瓦那一只船的民,工厂目标只是一种功能。 无需做更多的工作。


由于该问题的例子完全不明确,它很难知道为什么(1) 两个独特的物体是用2个柜台制造的。 两个独特的目标已经是两个独特的目标,需要反之。

例如,Myster的固定变量从未在任何地方提及。 因此很难理解这个例子。

x, y = myClassFactory( [ "hello", "goodbye" ] ) 

如果实际用于某件事的计数或最后价值,则可能树立一个有意义的榜样。

你们不必在这里使用一个类别变量;这是使用全球产品的一个完全有效的案例:

_counter = 0
_last_value = None
class Myclass(obj):
    def __init__(self, name):
        self.name = name

        global _counter, _last_value
        _counter += 1
        _last_value = name

我感觉到,一些人会把全球人赶出去,因此,快速审查可能是为了弄清哪些错误而不是错误的全球。

全球传统上是方案任何地方可见和可变的变量,uncopd。 这对使用C类语言的全球人来说是一个问题。 它与沙捞越完全无关;这些“全球化”已扩展到模块。 “Myster”这一类别名称同样是全球性的;这两个名称在重新载列的单元中范围相同。 大部分变数- Python等于C++---are,符合逻辑地属于物体或当地范围,但该类所有用户都已经清结。

我并没有强烈地反对为此使用类别变量(而且工厂完全没有必要),但全球是我如何一般地这样做的。

难道这种幻觉吗? 而且,这无疑比拥有全球反变数和最近的例子的价值要高。

它在沙尔说,只有一种正确的方式去做任何事情。 我不能想有更好的办法来落实这一点,这样就会继续下去。 尽管许多人将批评你“非致命”解决问题(如 Java法者像 or法者那样的无谓的反对倾向,或许多人从C和C++带走的“单自制”态度),但在大多数情况下, your习惯不会把你送至Sharma。

除此以外,如果是“慢性”的话,谁会照料? 它是行之有效的,不是一个业绩问题?





相关问题
Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

An enterprise scheduler for python (like quartz)

I am looking for an enterprise tasks scheduler for python, like quartz is for Java. Requirements: Persistent: if the process restarts or the machine restarts, then all the jobs must stay there and ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

What is suggested seed value to use with random.seed()?

Simple enough question: I m using python random module to generate random integers. I want to know what is the suggested value to use with the random.seed() function? Currently I am letting this ...

How can I make the PyDev editor selectively ignore errors?

I m using PyDev under Eclipse to write some Jython code. I ve got numerous instances where I need to do something like this: import com.work.project.component.client.Interface.ISubInterface as ...

How do I profile `paster serve` s startup time?

Python s paster serve app.ini is taking longer than I would like to be ready for the first request. I know how to profile requests with middleware, but how do I profile the initialization time? I ...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...

热门标签