Python中的旧样式和新样式类有什么区别?我什么时候应该使用其中一种?
何时以及为什么我应该在类中使用public,private和protected函数和变量?他们之间有什么区别?
例子:
// Public
public $variable;
public function doSomething() {
// ...
}
// Private
private $variable;
private function doSomething() {
// ...
}
// Protected
protected $variable;
protected function doSomething() {
// ...
}
Run Code Online (Sandbox Code Playgroud) 我听说Liskov替换原则(LSP)是面向对象设计的基本原则.它是什么以及它的使用例子是什么?
oop liskov-substitution-principle definition design-principles solid-principles
我已经看过几次提到这个,我不清楚这是什么意思.你何时以及为何会这样做?
我知道接口有什么作用,但事实上我不清楚这一点让我觉得我错过了正确使用它们.
如果你这样做是这样的:
IInterface classRef = new ObjectWhatever()
Run Code Online (Sandbox Code Playgroud)
你可以使用任何实现的类IInterface吗?你什么时候需要这样做?我唯一能想到的是,如果你有一个方法,你不确定除了实现之外将传递什么对象IInterface.我想不出你需要多久做一次.
另外,你怎么能写一个接受实现接口的对象的方法?那可能吗?
到目前为止,我已经主要接触过OO编程,并期待学习一门函数式语言.我的问题是:
我何时应该使用接口,何时应该使用基类?
如果我不想实际定义方法的基本实现,它应该始终是一个接口吗?
如果我有狗和猫类.为什么我要实现IPet而不是PetBase?我可以理解有ISheds或IBarks(IMakesNoise?)的接口,因为那些可以基于宠物放在宠物上,但我不明白哪个用于通用Pet.
我正在学习Python编程语言,而且我遇到了一些我不太了解的东西.
在如下方法中:
def method(self, blah):
def __init__(?):
....
....
Run Code Online (Sandbox Code Playgroud)
怎么self办?这是什么意思?这是强制性的吗?
该__init__方法有什么作用?为什么有必要?(等等.)
我认为它们可能是OOP结构,但我不太了解.
我有一个Python对象列表,我想根据对象本身的属性进行排序.该列表如下:
>>> ut
[<Tag: 128>, <Tag: 2008>, <Tag: <>, <Tag: actionscript>, <Tag: addresses>,
<Tag: aes>, <Tag: ajax> ...]
Run Code Online (Sandbox Code Playgroud)
每个对象都有一个计数:
>>> ut[1].count
1L
Run Code Online (Sandbox Code Playgroud)
我需要按递减计数的数量对列表进行排序.
我已经看过几种方法,但我正在寻找Python的最佳实践.