调用没有参数的python类方法 我是Python的新手(来自C++世界),正在用类方法进行实验。我创建了一个没有任何参数的方法(在本例中故意避免self参数)。然后我试着给它打电话 class car: def car_method(): print("Inside Car method") obj = car_method() obj.car_method() <---- this creates error: TypeError: car_method() takes 0 positional arguments but 1 was given 等级车: def car_方法(): 打印(“车内法”) obj=汽车法() 在python中,类的方法定义如下: 类MyObj(对象): 定义my_方法(自我): 通过

调用没有参数的python类方法 我是Python的新手(来自C++世界),正在用类方法进行实验。我创建了一个没有任何参数的方法(在本例中故意避免self参数)。然后我试着给它打电话 class car: def car_method(): print("Inside Car method") obj = car_method() obj.car_method() <---- this creates error: TypeError: car_method() takes 0 positional arguments but 1 was given 等级车: def car_方法(): 打印(“车内法”) obj=汽车法() 在python中,类的方法定义如下: 类MyObj(对象): 定义my_方法(自我): 通过,python,python-3.x,parameter-passing,self,class-method,Python,Python 3.x,Parameter Passing,Self,Class Method,始终至少有一个作为实例本身的第一个参数。在Python中,类的所有方法都隐式接收类对象的实例作为第一个参数 Python的一般做法是将类方法中的第一个参数命名为self,这类似于C和Java语言中的this。唯一的区别是,它不是一个保留关键字,你可以给它起任何名字。虽然使用self是一种常规,因为它对Python程序员和Python文档更具可读性,但IDE解析器 您可以使用self跨类的方法访问类方法和变量。一个非常简单的示例展示了self的用例: In [37]: class car:

始终至少有一个作为实例本身的第一个参数。

在Python中,类的所有方法都隐式接收类对象的实例作为第一个参数

Python的一般做法是将类方法中的第一个参数命名为
self
,这类似于C和Java语言中的
this
。唯一的区别是,它不是一个保留关键字,你可以给它起任何名字。虽然使用
self
是一种常规,因为它对Python程序员和Python文档更具可读性,但IDE解析器

您可以使用self跨类的方法访问类方法和变量。一个非常简单的示例展示了self的用例:

In [37]: class car:
    ...:     def __init__(self):
    ...:         self.car_name = 'Jaguar'
    ...:
    ...:     def car_method(self):
    ...:         print("I can access " + self.car_name + " because I have
    ...: self")
    ...:         print("Inside Car method")
    ...:
    ...:     def another_method(self):
    ...:         # this calls car_method
    ...:         self.car_method()
    ...:

In [38]: c = car()

In [39]: c.another_method()
I can access Jaguar because I have self
Inside Car method
如果你想要一份工作。您可以在Python中将类方法定义为:

class car:

    @classmethod
    def car_method(cls):
        print("Inside Car method")
Python中调用了
@classmethod
方法之上的小东西
@car\u方法。但即使在类方法中,类实例也作为参数在car_方法中传递

如果您想在不带参数的情况下调用方法
car\u method
,并且不需要访问类/实例变量(这些称为静态方法)。您可以使用
@staticmethod
装饰器将方法定义为静态方法

class car:

    @staticmethod
    def car_method():
        print("Inside Car method")
这里没有
self
作为参数传递,您可以调用car\u方法作为
car().car\u方法()

为什么Python允许创建car\u方法,即使self作为参数传递?

这是因为Python不像C那样是静态类型的,它是一种动态语言。与静态类型语言不同,Python中的所有类型、函数参数等检查都是在运行时进行的

要了解@classmethod和@staticmethod decorator的更多信息,

要访问
car
类中的
ca\u方法(
),只需创建
car
类的实例,然后使用该方法。 例如:

class car:

    def car_method():
       print("Inside Car method")

a = car()
a.car_method()
或者简单地说:

class car:
    
    def car_method():
           print("Inside Car method")
    
car().car_method()

在写最后一句话
时,我甚至可以将car_方法称为类方法吗?或者它只是类中定义的一个方法?
,我意识到它的行为可能不同,经过进一步的实验,我意识到,它确实是一个类方法,可以在类中使用,但不像
self.car\u method()
。这仍然会产生错误。但是,只要您不在任何其他类方法中使用它,就可以像调用
car\u method()
一样调用它!!!!它可以用作类属性!!感谢您的回复,您提到的是
classmethod
staticmethod
,但我想知道类中的方法不是这两种方法中的任何一种吗?它的行为如何,它的好处/用途以及我如何称呼它?我在发布帖子后添加了一条评论,所以也请发表评论。我很想知道这一点@legameeternoforall在回答中添加了一个例子。我建议你阅读我随附的文件。它为Python中的OOP提供了一个很好的开端。@LegameeterNoFora如果您觉得它对您有用,请随意使用。:-)
class car:
    
    def car_method():
           print("Inside Car method")
    
car().car_method()