class Silly:
@property
def silly(self):
"This is a silly property"
print("You are getting silly")
return self._silly
@silly.setter
def silly(self, value):
print("You are making silly {}".format(value))
self._silly = value
@silly.deleter
def silly(self):
print("Whoah, you killed silly!")
del self._silly
s = Silly()
s.silly = "funny"
value = s.silly
del s.silly
Run Code Online (Sandbox Code Playgroud)
但它没有打印出"你变得愚蠢","你正在制造愚蠢的搞笑",......正如预期的那样.不知道为什么.亲爱的,你能让我弄清楚吗?
提前致谢!
也许这是一个愚蠢的问题,但为什么这段代码在 python 2.7 中不起作用?
from ConfigParser import ConfigParser
class MyParser(ConfigParser):
def __init__(self, cpath):
super(MyParser, self).__init__()
self.configpath = cpath
self.read(self.configpath)
Run Code Online (Sandbox Code Playgroud)
它失败于:
TypeError: must be type, not classobj
Run Code Online (Sandbox Code Playgroud)
在线上super()。
当你在python中声明一个类时,我经常看到(object)在类名旁边写的.
class someClass(object):
def __init__(self, some_variable):
...
...
Run Code Online (Sandbox Code Playgroud)
这和下面写的一样吗?
class someClass: # didn't write (object) here.
def __init__(self, some_variable):
...
...
Run Code Online (Sandbox Code Playgroud)
我觉得它们的运作方式没有任何区别.难道仅仅是一种澄清,someClass是subclass的object?object当我做一个明确的写作时,这是一个好习惯class吗?
我正在学习python并向OOP介绍自己.但是,我正在努力理解如何最好地构建类,特别是,以下类定义之间的差异以及何时应该使用每个类:
class my_class:
content...
class my_class():
content...
class my_class(object):
content...
Run Code Online (Sandbox Code Playgroud)
我一直在阅读非常有用的python在线帮助,虽然没有找到这个问题的具体答案.所以任何想法或推荐的参考将不胜感激,谢谢.
我试图__init__()在一个超类中调用该方法,其中所说的方法接受参数,但是似乎不起作用。请参见下面的代码:
>>> class A:
def __init__(self, param1, param2):
self._var1 = param1
self._var2 = param2
>>> class B(A):
def __init__(self, param1, param2, param3):
super(B, self).__init__(param1, param2)
self._var3 = param3
>>> a = A("Hi", "Bob")
>>> a._var1
'Hi'
>>> a._var2
'Bob'
>>>
>>> b = B("Hello", "There", "Bob")
Traceback (most recent call last):
File "<pyshell#74>", line 1, in <module>
b = B("Hello", "There", "Bob")
File "<pyshell#69>", line 3, in __init__
super(B, self).__init__(param1, param2)
TypeError: must be type, not classobj
>>> …Run Code Online (Sandbox Code Playgroud) 出于某种原因,我无法左右让我的头__init__和__new__.我有一堆从终端运行良好的代码,但当我将其作为Google快速搜索框的插件加载时,我收到错误TypeError: default __new__ takes no parameters.
我一直在读这个错误,这让我的脑子旋转起来.目前我有3个类,没有子类,每个类都有自己def的类.我从不使用def __init__或def __new__,但我已经明确感觉这些是给我错误的功能(或缺少它).
我不知道如何将代码汇总到一个在这里有用的代码片段,因为我有点过头,但整个脚本都可以在github上找到.不要指望任何人为我修改我的代码,我只是在我的智慧结束.一个简单的(简单的英语,而不是python文档的引用,我已经阅读了20次,但仍然没有真正理解)探索为什么会出现这个错误,或者为什么我应该,或者不是,使用__init__和/或__new__功能将得到认真的赞赏.
在python中,为什么建议继承我们从类中创建的任何类object,为什么不直接将它作为基类?我注意到一个重要的事情是,__slots__如果我将我的类作为基类(而不是作为类的子类object),则声明不起作用.通过从班级继承我的班级,我还有哪些其他优点/缺点object?
为什么Python将这些类视为不同的数据类型?
>>> class A:
... pass
...
>>> class B(object):
... pass
...
>>> a = A()
>>> b = B()
>>> type(A)
<type 'classobj'>
>>> type(B)
<type 'type'>
>>> type(a)
<type 'instance'>
>>> type(b)
<class '__main__.B'>
Run Code Online (Sandbox Code Playgroud)
我很新.所以我真的不明白为什么它将所有这些视为不同的数据类型.它们都是类,所以看起来它们应该是相同的.
我正在学习类和我的return语句有问题(这是一个声明吗?我希望如此),程序什么都不打印,它只是结束而没有做任何事情.
class className:
def createName(self, name):
self.name = name
def displayName(self):
return self.name
def saying(self):
print("Hello %s" % self.name)
first = className()
second = className()
first.createName("Jack")
second.createName("Joy")
first.displayName()
second.displayName()
Run Code Online (Sandbox Code Playgroud)
我知道我做的事情显然是错的,但我真的不知道是什么.我很感激一些帮助.
对于没有继承的类定义,之间是否存在任何差异或风格偏好:
class M:
pass
Run Code Online (Sandbox Code Playgroud)
和
class M():
pass
Run Code Online (Sandbox Code Playgroud)
?
我在PEP8中找不到它.
python ×10
class ×6
inheritance ×2
object ×2
coding-style ×1
decorator ×1
init ×1
instance ×1
oop ×1
properties ×1
python-2.7 ×1
python-3.x ×1
return ×1
super ×1
typeerror ×1
types ×1