调用没有结构的python类方法

我是python(来自C++世界)的新手,正在尝试使用类方法。我创建了一个没有任何参数的方法(在这种情况下有目的地避免了self参数)。然后我试图把它调用没有结构的python类方法

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

我认为这个错误是因为,在Python中,每类方法,调用时总是通过至少一个参数,它是对象的引用。我对么?

然后进一步实验,我写了

obj.car_method  <----- assuming I am not passing any argument to it 

但功能打印什么。

然后我试图使用打印它的类型

print(obj.car_method)

这就造成了

bound method car.car_method of <__main__.car object at 0x005D2290>

任何人能解释这是怎么回事。我如何“调用”car_method?如果没有办法调用car_method,为什么python让我定义没有任何参数的方法?

我想在这里掌握一些基础知识。我甚至可以将car_method作为类方法调用吗?或者它只是在类中定义的方法?

回答:

在python类的方法是通过这样定义:

class MyObj(object): 

def my_method(self):

pass

总是至少一个第一参数,它是该实例本身。

回答:

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

Python中的一般做法是将类方法中的第一个参数命名为self,它类似于C和Java类语言中的this。唯一的区别是,它不是保留关键字,您可以任何名称。尽管使用self是一个通用惯例,因为它对Python程序员和Python文档,IDE解析器更具可读性。 Read the docs。

您可以使用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

如果你想要一个classmethod。你可以在Python中定义一个类方法,如:

class car: 

@classmethod

def car_method(cls):

print("Inside Car method")

car_method方法顶部的小东西@classmethod被称为在Python decorator。但即使在类方法中,类实例也作为car_method中的参数传递。

如果你想调用你的方法car_method没有参数,并且不需要访问类/实例变量(这些称为静态方法)。您可以使用@staticmethod装饰器将您的方法定义为静态方法。

class car: 

@staticmethod

def car_method():

print("Inside Car method")

这里没有self作为参数传递,并且可以调用car_method为car().car_method()

为什么Python的允许创建car_method即使自我作为参数传递?

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

要了解更多关于@classmethod和@staticmethod装饰,read about @classmethod and @staticmethod in this awesome SO thread

以上是 调用没有结构的python类方法 的全部内容, 来源链接: utcz.com/qa/259929.html

回到顶部