区块链技术博客
www.b2bchain.cn

在Python中的类方法中调用方法 – python程序员分享

本文介绍了在Python中的类方法中调用方法 – python程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我发现从类的方法中调用方法时,不需要将任何变量传递给该方法。相反,在调用方法时,它仅从该方法继承属性。

class Person(object):     def method1(self):         print(self.attr1)      def method2(self):         self.attr1 = 'attr1'         self.method1() 

这对我有用。但是,我的第一个直观尝试是由以下非功能性代码组成。

class Person(object):     def method1(self, attr1):         print(self.attr1)      def method2(self):         self.method1('attr1') 

即使我找到了解决问题的方法,但我仍然非常有兴趣了解这一问题的基础。

编辑:我想理解的示例是这样的:

class Converter(object):      def split(self, x):         self.a, self.b, self.z, self.c = self.x.split(' ')         self.z = None         self.a = int(self.a)      def converter(self, unit, example):         self.x = ''         while self.x != 'exit':             self.x = input("Type '50 %s' or similar, or type 'units' to view valid units; type 'exit' to return to the main menu: " % (self.example))             if self.x == 'exit':                 break             elif self.x == 'units':                 print(list(self.units.keys()))             else:                 self.split(self.x)                 print(self.a / self.units[self.b] * self.units[self.c], self.c)      def volume(self):         self.units = { 'L': 1,                        'mL': 1000,                        'q': 1.05699,                        'p': 2.11338,                        'gal': 3.78541,                        'oz': 33.814,                        'ccm': 1000,                        'cin': 61.024                         }          self.example = 'L to q'         self.converter() 

我不明白为什么这行不通:

class Converter(object):      def split(self, x):         self.a, self.b, self.z, self.c = self.x.split(' ')         self.z = None         self.a = int(self.a)      def converter(self):         self.x = ''         while self.x != 'exit':             self.x = input("Type '50 %s' or similar, or type 'units' to view valid units; type 'exit' to return to the main menu: " % (self.example))             if self.x == 'exit':                 break             elif self.x == 'units':                 print(list(self.units.keys()))             else:                 self.split(self.x)                 print(self.a / self.units[self.b] * self.units[self.c], self.c)      def volume(self):         self.units = { 'L': 1,                        'mL': 1000,                        'q': 1.05699,                        'p': 2.11338,                        'gal': 3.78541,                        'oz': 33.814,                        'ccm': 1000,                        'cin': 61.024                         }          self.converter({'L':2}, 'L to q') 

EDIT2:好的,我想我现在明白了。属性被附加到实例对象,而我只是没有将传递给下一个函数的属性分配给实例对象。

python大神给出的解决方案

问题表达方式暗示您误解了属性的工作原理。属性与对象(类的实例)有关,而与方法无关。当您具有这样的方法时:

def method2(self):     self.attr1 = 'attr1'     self.method1() 

self引用您要在其上调用该方法的实例。例如,如果先执行bob = Person()然后执行bob.method2(),则self将与bob是同一对象。当您执行self.attr1 = 'attr1'时,请在该对象上设置属性。如果随后调用method1,则它可以访问对象上的所有属性。您没有放在其中的任何属性都不存在。

简而言之,如果您从不执行self.attr1 = whatever,则尝试获取self.attr1的值将永远无法进行。在第二个示例中,您从不执行self.attr1 = ...,因此没有要获取的属性attr1

我同意zehnpaard的观点,即您使用相同的标签attr1作为属性名称(self.attr1),局部变量名称(attr1)和字符串值('attr1')使事情变得混乱。将所有这些更改为不同的内容,您将开始了解它们的工作方式是否不同。

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 在Python中的类方法中调用方法 – python程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们