标签: class-design

为什么在__new __()后总是调用__init __()?

我只是想简化我的一个类,并引入了一些与flyweight设计模式相同的功能.

但是,我有点困惑,为什么__init__总是被称为__new__.我没想到这个.任何人都可以告诉我为什么会这样,以及我如何能够实现这个功能呢?(除了将实施放入__new__感觉相当hacky之外.)

这是一个例子:

class A(object):
    _dict = dict()

    def __new__(cls):
        if 'key' in A._dict:
            print "EXISTS"
            return A._dict['key']
        else:
            print "NEW"
            return super(A, cls).__new__(cls)

    def __init__(self):
        print "INIT"
        A._dict['key'] = self
        print ""

a1 = A()
a2 = A()
a3 = A()
Run Code Online (Sandbox Code Playgroud)

输出:

NEW
INIT

EXISTS
INIT

EXISTS
INIT
Run Code Online (Sandbox Code Playgroud)

为什么?

python design-patterns class-design

525
推荐指数
14
解决办法
26万
查看次数

你如何设计面向对象的项目?

我正在开发一个大型项目(对我来说),它将有许多类,需要可扩展,但我不知道如何规划我的程序以及类需要如何交互.

我在几个学期后参加了OOD课程并从中学到了很多东西; 比如编写UML,并将需求文档翻译成对象和类.我们也学习了序列图,但不知怎的,我错过了讲座或其他什么,他们并没有真正坚持我.

在以前的项目中,我尝试过使用从课程中学到的方法,但通常最终得到的代码一旦我能说"是的,看起来像我的想法"我不想挖掘泥土添加新功能.

我有一份史蒂夫麦康奈尔的代码完整副本,我不断听到这里和其他地方都很棒.我阅读了有关设计的章节,似乎没有提供我正在寻找的信息.我知道他说这不是一个削减和干燥的过程,它主要基于启发式,但我似乎无法将他的所有信息都应用到我的项目中.

那么你在高级设计阶段(开始编程之前)做了些什么来确定你需要什么类(特别是那些不基于任何"真实世界对象"的类)以及它们如何相互作用

具体来说,我对您使用的方法感兴趣?您遵循的流程是什么,通常会形成一个良好,干净的设计,能够代表最终产品?

architecture oop class-design

229
推荐指数
10
解决办法
10万
查看次数

我怎么知道何时创建界面?

我正处于开发学习的某个阶段,我觉得我必须更多地了解接口.

我经常阅读它们,但似乎我无法掌握它们.

我已经阅读过这样的例子:动物基类,IAnimal界面,如'Walk','Run','GetLegs'等等 - 但我从来没有做过某些事情,感觉就像"嘿我应该使用界面这里!"

我错过了什么?为什么我要掌握这么难的概念!我只是因为我可能没有意识到对一个人的具体需求而感到害怕 - 主要是由于理解它们的一些缺失方面!这让我觉得自己在成为开发者方面缺少一些东西!如果有人有过这样的经历并取得了突破,我会很感激如何理解这个概念.谢谢.

oop design-patterns class-design interface

191
推荐指数
12
解决办法
2万
查看次数

PHP5:const vs static

在PHP5中,使用const和有static什么区别?什么时候适合?和什么样的作用呢public,protectedprivate游戏-如果有的话.

php class-design constants object static-members

163
推荐指数
4
解决办法
8万
查看次数

如何在Python中设计类?

我在以前的问题上有一些非常棒的帮助来检测爪子内的爪子脚趾,但所有这些解决方案一次只能用于一次测量.

现在我有数据包含:

  • 约30只狗;
  • 每个都有24个测量值(分成几个子组);
  • 每次测量至少有4个触点(每个爪子一个)和
    • 每个联系人分为5个部分
    • 有几个参数,如接触时间,位置,总力等.

替代文字

显然将所有内容都放在一个大对象上并不会削减它,所以我认为我需要使用类而不是当前的大量函数.但即使我已经阅读了学习Python关于类的章节,我也无法将其应用于我自己的代码(GitHub链接)

我还觉得每次想要获取一些信息时处理所有数据都很奇怪.一旦我知道每只爪子的位置,我就没有理由再次计算它.此外,我想比较同一只狗的所有爪子,以确定哪个接触属于哪个爪子(前/后,左/右).如果我继续只使用功能,这将变得一团糟.

所以现在我正在寻找关于如何创建类的建议,让我以合理的方式处理我的数据(链接到一条狗的压缩数据).

python oop class-design

142
推荐指数
3
解决办法
7万
查看次数

UML是否实用?

在大学里,我有很多设计和面向UML的课程,我认识到UML可以用来使软件项目受益,特别是用例映射,但它真的很实用吗?我已经完成了一些合作工作条款,看起来UML并没有在业界大量使用.是否值得在项目中创建UML图表的时间?另外,我发现类图通常没用,因为查看类的头文件会更快.具体哪些图表最有用?

编辑:我的经验仅限于10个以下的小型开发人员项目.

编辑:许多好的答案,虽然不是最详细的,但我相信所选择的是最平衡的.

diagram uml class-design

112
推荐指数
11
解决办法
3万
查看次数

85
推荐指数
6
解决办法
2万
查看次数

最佳实践:在类定义中对public/protected/private进行排序?

我从头开始一个新项目,希望它干净/具有良好的编码标准.经验丰富的开发人员会以什么样的顺序在课堂上做出贡献?

答:1)公共方法2)私人方法3)公共变量4)私有变量

B:1)公共变量2)私有变量3)公共方法4)私有方法

C:1)公共变量2)公共方法3)私有方法4)私有变量

我通常喜欢将公共静态变量放在顶部,但是然后会在构造函数之前列出公共静态方法,还是应该首先列出构造函数?诸如此类的事情...

我知道这很有点但我只是想知道:这是什么最好的做法?

PS:不,我不使用Cc#.我知道.我是个luddite.

oop coding-style class-design

78
推荐指数
5
解决办法
4万
查看次数

你怎么在大海捞针中找到针?

当以面向对象的方式实现大海捞针搜索时,您基本上有三种选择:

1. needle.find(haystack)

2. haystack.find(needle)

3. searcher.find(needle, haystack)
Run Code Online (Sandbox Code Playgroud)

你更喜欢哪个?为什么?

我知道有些人更喜欢第二种选择,因为它避免引入第三种物体.然而,我不禁感到第三种方法在概念上更"正确",至少如果你的目标是塑造"现实世界".

在哪种情况下,您认为引入辅助对象是合理的,例如本例中的搜索器,何时应避免使用?

oop class-design program-structure

73
推荐指数
8
解决办法
9149
查看次数

如何在C#中为类名设置别名,而不必为每个使用该类的文件添加一行代码?

我想为类名创建一个别名.以下语法将是完美的:

public class LongClassNameOrOneThatContainsVersionsOrDomainSpecificName
{
   ...
}

public class MyName = LongClassNameOrOneThatContainsVersionOrDomainSpecificName;
Run Code Online (Sandbox Code Playgroud)

但它不会编译.


注意此示例仅供参考.不要试图通过建议改变整个系统的设计来解决这个特殊问题.此示例的存在或缺乏不会改变原始问题.

一些现有代码依赖于静态类的存在:

public static class ColorScheme
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

此配色方案是Outlook 2003配色方案.我想介绍一个Outlook 2007配色方案,同时保留Outlook 2003配色方案:

public static class Outlook2003ColorScheme
{
   ...
}

public static class Outlook2007ColorScheme
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

但我仍然面临这样一个事实,即代码依赖于名为ColorScheme的静态类的存在.我的第一个想法是创建一个ColorScheme类,我将从Outlook2003或Outlook2007下载:

public static class ColorScheme : Outlook2007ColorScheme
{
}
Run Code Online (Sandbox Code Playgroud)

但你不能从静态类下降.

我的下一个想法是创建静态ColorScheme类,但使Outlook2003ColorScheme和Outlook2007ColorScheme类非静态.然后静态ColorScheme类中的静态变量可以指向"true"颜色方案:

public static class ColorScheme
{
    private static CustomColorScheme = new Outlook2007ColorScheme();
    ...
}

private class CustomColorScheme 
{ 
   ...
}

private class Outlook2008ColorScheme : CustomColorScheme 
{
    ...
} …
Run Code Online (Sandbox Code Playgroud)

c# class-design

71
推荐指数
7
解决办法
7万
查看次数