我知道这class foo(object)是一种老式的定义课程的方式.但我想更详细地了解这两者之间的区别.
在C#我会去:
string UserName;
string Password;
Run Code Online (Sandbox Code Playgroud)
但现在,在Python中:
class User:
UserName
Password
Run Code Online (Sandbox Code Playgroud)
我收到一个UserName未定义的错误.没有变量我可以声明变量吗?
可能重复:
Python中的旧样式和新样式类
Python 2.7中新式和旧式类的当前状态是什么?我不经常使用Python,但我依旧记得这个问题.文档似乎根本没有提到这个问题:Python教程:类.我还需要担心吗?一般来说,我应该声明我的类:
class MyClass:
pass
Run Code Online (Sandbox Code Playgroud)
要么?
class MyClass(object):
pass
Run Code Online (Sandbox Code Playgroud) 有什么区别:
class ClassName(object):
pass
Run Code Online (Sandbox Code Playgroud)
和
class ClassName:
pass
Run Code Online (Sandbox Code Playgroud)
当我调用那些类的模块的帮助功能时,你可以阅读____builtin____.objectCLASS标题下的第一个案例.对于第二种情况,它只显示类名.这些类和/或其可能的方法之间是否存在功能差异?
(我知道它class Classname(ParentClassName)有功能用途)
如果一个类的实例是一个object没有该类的子类,object怎么可能?这是一个例子:
>>> class OldStyle(): pass
>>> issubclass(OldStyle, object)
False
>>> old_style = OldStyle()
>>> isinstance(old_style, object)
True
Run Code Online (Sandbox Code Playgroud) 我有这段代码创建一个笔记并添加到笔记本中.当我运行这个时,我得到一个非序列错误的迭代.
import datetime
class Note:
def __init__(self, memo, tags):
self.memo = memo
self.tags = tags
self.creation_date = datetime.date.today()
def __str__(self):
return 'Memo={0}, Tag={1}'.format(self.memo, self.tags)
class NoteBook:
def __init__(self):
self.notes = []
def add_note(self,memo,tags):
self.notes.append(Note(memo,tags))
if __name__ == "__main__":
firstnote = Note('This is my first memo','example')
print(firstnote)
Notes = NoteBook()
Notes.add_note('Added thru notes','example-1')
Notes.add_note('Added thru notes','example-2')
for note in Notes:
print(note.memo)
Run Code Online (Sandbox Code Playgroud)
错误:
C:\Python27\Basics\OOP\formytesting>python notebook.py Memo=This is my first memo, Tag=example Traceback (most recent call last): File "notebook.py", line 27, in …
我已经使用Python很长一段时间了,我仍然不确定你为什么要从子类化object.这有什么区别:
class MyClass():
pass
Run Code Online (Sandbox Code Playgroud)
还有这个:
class MyClass(object):
pass
Run Code Online (Sandbox Code Playgroud)
据我所知,object是所有类的基类和隐含的子类.你从明确的子类化中获得了什么吗?什么是最"Pythonic"的事情?
有人可以向我解释为什么这样有效(在Python 2.5中):
class Foo(object):
pass
class Bar(Foo):
pass
print(Foo.__subclasses__())
Run Code Online (Sandbox Code Playgroud)
但这不是:
class Foo():
pass
class Bar(Foo):
pass
print(Foo.__subclasses__())
Run Code Online (Sandbox Code Playgroud)
后者返回"AttributeError:class Foo没有属性' __subclasses__'",但我不知道为什么.我知道这与旧式和新式类有关,但我不清楚为什么会使这个功能不可用.
澄清:我希望理解为什么__subclasses__()老式的不可用,我得到的方法对于旧式的类不存在但我不知道它是什么新的样式使这些新的功能可能.
怎么可能呢
class EmptyClass:
def __init__(self):
pass
e = EmptyClass()
e.a = 123
Run Code Online (Sandbox Code Playgroud)
工作和:
o = object()
o.a = 123
Run Code Online (Sandbox Code Playgroud)
没有(AttributeError: 'object' object has no attribute 'a')而
print isinstance(e, object)
>>> True
Run Code Online (Sandbox Code Playgroud)
?
什么是object()好的,当你不能像这样使用它?
如果我在Python中定义一个类,例如:
class AClass:
__slots__ = ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
它继承了哪个类?它似乎没有继承object.