Python 为什么我需要向这个类传递一个对象才能使它工作?

Python 为什么我需要向这个类传递一个对象才能使它工作?,python,class,object,self,Python,Class,Object,Self,因此,在我的职业生涯中,我一直在努力用Python取代PHP。所以我在apache中使用WebPy和WSGI,一切都很好,但我仍在学习该语言,找不到简单的解释。所以,当我胡闹,试图让其他类的方法在其他类中工作时,我遇到了一些说明,显示了第一个类被实例化,并在类名后面附加了(object)。事实证明,这是可行的,并允许我将数据传递给另一个类。有人能告诉我为什么这个代码会起作用吗 说到功,我的意思是,在我看来,如果第一个类在定义时没有指定(对象),那么数据就不能传递到那个类中?是这样吗 class

因此,在我的职业生涯中,我一直在努力用Python取代PHP。所以我在apache中使用WebPy和WSGI,一切都很好,但我仍在学习该语言,找不到简单的解释。所以,当我胡闹,试图让其他类的方法在其他类中工作时,我遇到了一些说明,显示了第一个类被实例化,并在类名后面附加了(object)。事实证明,这是可行的,并允许我将数据传递给另一个类。有人能告诉我为什么这个代码会起作用吗

说到功,我的意思是,在我看来,如果第一个类在定义时没有指定(对象),那么数据就不能传递到那个类中?是这样吗

class MyClass(object):
    def function1(self, num1, num2):
        return num1 + num2

class index:
    def GET(self):
        form = web.input()
        num1 = form.number1
        num2 = form.number2

        MyClass.function1(num1, num2)

我真的很想理解这一点。我的意思是,我让它工作很好(这是一个代码示例,不是我的实际项目),但如果我理解它工作的原因,它会有所帮助。谢谢,我相信这可能是一个简单的问题。

不要对此感到困惑。它是一个新的样式对象,在Python2.2中引入了几个新特性。它是Python 3中的默认行为。但是您需要在Python2中拥有该对象


请参阅:

不要与此混淆。它是一个新的样式对象,在Python2.2中引入了几个新特性。它是Python 3中的默认行为。但是您需要在Python2中拥有该对象


请参阅:

Python 2中有两种类型的类:旧样式和新样式。新样式类是通过子类化
对象创建的。事实上,如果不使用多重继承和与
类型
进行类型比较,那么差异并没有那么大,您几乎不会注意到

class old_style:
    def __init__(self):
       pass

class new_style(object):
    def __init__(self):
        pass

old_style_instance1 = old_style()
old_style_instance2 = old_style()
new_style_instance1 = new_style()
new_style_instance2 = new_style()

type(old_style_instance1) == type(old_style_instance2)
返回
False

type(new_style_instance1) == type(new_style_instance2)
返回
True

关于你的代码。您倾向于使用实例方法,如类方法,即方法
MyClass.function1
index.GET
有一个名为
self
的参数,因此它们只能从类实例调用,而不能从类本身调用
self
是在实例初始化时由特殊方法(
\uuuu new\uuuu
)创建的特殊名称空间,例如
myclass\u instance=myclass()
。如果您想使用可以从类调用的类方法或静态方法,您应该以不同的方式声明它们

class MyClass(object):
    @staticmethod
    def function1(num1, num2):
        return num1 + num2

class index:
    @staticmethod
    def GET():
        num1, num2 = get_numbers_somehow()
        MyClass.function1(num1, num2)

在这种情况下,代码将起作用,这与从
对象继承
类无关。您应该考虑阅读Python类和实例来理解差异。顺便说一句,
@
语法用于一种叫做装饰的东西。如果您打算大量使用Python装饰器,请阅读它

Python 2中有两种类型的类:旧样式和新样式。新样式类是通过子类化
对象创建的。事实上,如果不使用多重继承和与
类型
进行类型比较,那么差异并没有那么大,您几乎不会注意到

class old_style:
    def __init__(self):
       pass

class new_style(object):
    def __init__(self):
        pass

old_style_instance1 = old_style()
old_style_instance2 = old_style()
new_style_instance1 = new_style()
new_style_instance2 = new_style()

type(old_style_instance1) == type(old_style_instance2)
返回
False

type(new_style_instance1) == type(new_style_instance2)
返回
True

关于你的代码。您倾向于使用实例方法,如类方法,即方法
MyClass.function1
index.GET
有一个名为
self
的参数,因此它们只能从类实例调用,而不能从类本身调用
self
是在实例初始化时由特殊方法(
\uuuu new\uuuu
)创建的特殊名称空间,例如
myclass\u instance=myclass()
。如果您想使用可以从类调用的类方法或静态方法,您应该以不同的方式声明它们

class MyClass(object):
    @staticmethod
    def function1(num1, num2):
        return num1 + num2

class index:
    @staticmethod
    def GET():
        num1, num2 = get_numbers_somehow()
        MyClass.function1(num1, num2)

在这种情况下,代码将起作用,这与从
对象继承
类无关。您应该考虑阅读Python类和实例来理解差异。顺便说一句,
@
语法用于一种叫做装饰的东西。如果您打算大量使用Python装饰器,请阅读它

我想这一点反省会帮助你理解:

给定任何对象
x
,您可以通过键入
dir(x)
来查看哪些函数和数据成员可用。试试这些东西:

>>> object
<type 'object'>      
>>> dir(object)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> 
>>> 
>>> class A:pass
...              
>>> A
<class __main__.A at 0x7f2ef1bdf2c0>
>>> 
>>> dir(A)
['__doc__', '__module__']    #this is the only stuff attached to the class 'A'
>>> 
>>> class B(object):pass   #the brackets imply inheritance
... 
>>> B
<class '__main__.B'>
>>> 
>>> dir(B)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>对象
>>>目录(对象)
“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU,“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU类类类类类类类类类类类类类类类类类类类类类类类类类类类类类,”,”,”,”,”UUUUUUUu_']
>>> 
>>> 
>>>甲级:及格
...              
>>>A
>>> 
>>>处长(A)
这是唯一附加到类“A”的东西
>>> 
>>>B类(对象):传递#括号表示继承
... 
>>>B
>>> 
>>>处长(B)
“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU u'、uuu str_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
B
拥有
A
拥有的所有东西(因为所有类都会得到一些默认的东西),也拥有
对象拥有的所有东西(因为它
对象继承


还有。在代码中,
MyClass.function1(num1,num2)
行不起作用。试试看

我想这一点反省会帮助你理解:

给定任何对象
x
,您可以通过键入
dir(x)
来查看哪些函数和数据成员可用。试试这些东西:

>>> object
<type 'object'>      
>>> dir(object)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> 
>>> 
>>> class A:pass
...              
>>> A
<class __main__.A at 0x7f2ef1bdf2c0>
>>> 
>>> dir(A)
['__doc__', '__module__']    #this is the only stuff attached to the class 'A'
>>> 
>>> class B(object):pass   #the brackets imply inheritance
... 
>>> B
<class '__main__.B'>
>>> 
>>> dir(B)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>对象
>>>目录(对象)
“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU,“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU类类类类类类类类类类类类类类类类类类类类类类类类类类类类类,”,”,”,”,”UUUUUUUu_']
>>> 
>>> 
>>>甲级:及格
...              
>>>A
>>> 
>>>处长(A)
文件__