大家写 python 的时候不会觉得 self 有点冗余吗

2016-05-23 16:21:42 +08:00
 huanghua123

写这样一个简单的类用到 n 多 self ,个人觉得有点冗余,大家什么感觉?我也是初学,或者有好的方法可以避免?

class VendingMachine:
    """A vending machine that vends some product for some price."""
    def __init__(self,stockName,stockPrice):
        self.stockName = stockName
        self.stockPrice = stockPrice
        self.stockNumber = 0
        self.balance = 0

    def vend(self):
        if self.stockNumber == 0:
            return "Machine is out of stock."
        elif self.balance < self.stockPrice:
            return 'You must deposit $' + str(self.stockPrice - self.balance) + ' more.'
        else:
            self.stockNumber -= 1
            change = self.balance - self.stockPrice;
            self.balance = 0
            if change == 0:
                return 'Here is your candy.'
            else:
                return 'Here is your candy and $'+ str(change) +' change.'


    def deposit(self,amount):
        self.balance += amount

        if(self.stockNumber == 0):
            return 'Machine is out of stock. Here is your $' + str(self.balance) + '.'

        return "Current balance: $" + str(self.balance)

    def restock(self,stockNumber):
        self.stockNumber += stockNumber
        return "Current candy stock: " + str(self.stockNumber)
7353 次点击
所在节点    Python
50 条回复
wsdjeg
2016-05-24 07:08:54 +08:00
我觉得 java 方法调用的模式就比较好.
cc7756789
2016-05-24 07:27:45 +08:00
你是没用过 go 的错误处理吧。如果你希望其他语言像 CoffeeScript 一样把 JS 的括号都省了,那么还是转行算了,代码的清晰准确比多写几个跟踪到数据的指针变量符号重要多了。
KyL
2016-05-24 09:26:17 +08:00
self 是程序员自己起的一个变量名,它之所以能起到 self 的作用,只是因为它是类方法的第一个参数。你可以把 self 改成任意变量名。
我觉得确实有些多此一举,更好的方法是把 self 设为 py 的一个关键字,就像 C++/Java 中的 this 一样。
realpg
2016-05-24 09:31:22 +08:00
那个,你把 stockNumber 改成 inStockCount 就没歧义了

number 单独使用并没有计数的意思,或者说无法强调计数 in stock 和 stock 是两个完全不同的概念
RqPS6rhmP3Nyn3Tm
2016-05-24 10:11:47 +08:00
IDE 都自动搞定了,读起来容易很多
ChiangDi
2016-05-24 10:15:18 +08:00
这是个历史缺陷,作者都说了
2owe
2016-05-24 11:52:03 +08:00
兼顾便利性和可读性是坠吼滴!只能偏袒一方的话,可读性优先。
robinshi2010
2016-05-24 13:51:13 +08:00
@NullMan 觉得建议不错。感谢。
stevenhu888
2016-05-24 14:06:03 +08:00
@NullMan 老兄所言甚是
misaka15
2016-05-25 10:18:16 +08:00
类似于 Swift 一样,省略掉 self ,可读性比较差

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/280677

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX