在Python中,我试图扩展内置'int'类型.这样做我想将一些keywoard参数传递给构造函数,所以我这样做:
class C(int):
     def __init__(self, val, **kwargs):
         super(C, self).__init__(val)
         # Do something with kwargs here...
虽然调用C(3)工作正常,但C(3, a=4)给出:
'a' is an invalid keyword argument for this function` 
并C.__mro__返回预期的:
(<class '__main__.C'>, <type 'int'>, <type 'object'>)
但似乎Python试图先打电话int.__init__......任何人都知道为什么?这是解释器中的错误吗?
我在许多地方读到单身人士可以使用接口.有些我怎么也无法理解这一点.
我已经阅读了关于这个主题的其他几个问题(这里,这里,这里),但还没有看到一个很好的答案.我之前已经开发了我公平的数据访问层,并且个人更喜欢使用实例类而不是静态类.但是,它更多的是个人偏好(我喜欢测试我的业务对象,这种方法可以更容易地模拟DAL).我之前使用静态类来访问数据库,但我总是觉得这种设计的适当性有点不安全(特别是在ASP.NET环境中).
任何人都可以提供一些关于这两种方法的优点/缺点,特别是在ASP.NET应用程序中使用ADO.NET提供程序(无ORM)开发数据访问类.如果您有更一般的静态与实例类技巧,请随意加入.
特别是,我担心的问题是:
谢谢!
我的问题是:
还请讨论每个的优点和缺点.我也想了解这一点.
可能相关:
为什么PHP属性不允许函数?
请原谅我,如果以前曾经问过这个问题,但为什么你不能得到以下内容:
class foo {
 require_once 'defines.php';
 private $_server = DB_SERVER;
 private $_username = DB_USERNAME;
 private $_password = DB_PASSWORD;
 private $_database = DB_NAME;
 public  $debug = false;
 public $_conn;
 function __construct() {                          
    $connection = @mysqli_connect($this->_server, $this->_username, $this->_password, $this->_database);
 }
 ...
}
干杯,
编辑:寻找为什么这种行为存在以及为什么不可能.如何结束投票?
EDIT2:还想重新打开这个
我正在尝试编写一个可重用的解析库(为了好玩).
我写了一个Lexer生成序列的类Tokens.Token是子类层次结构的基类,每个子类表示不同的标记类型,具有自己的特定属性.例如,有一个子类LiteralNumber(从导出Literal,并通过它从Token),其具有用于处理其词位的数值其自身特定的方法.一般处理词位的方法(检索它们的字符串表示,源中的位置等)在基类中Token,因为它们对所有标记类型都是通用的.此类层次结构的用户可以为我未预测的特定令牌类型派生自己的类.
现在我有一个Parser类来读取标记流并尝试将它们与其语法定义相匹配.例如,它有一个方法matchExpression,该方法又调用matchTerm并调用此方法,该方法matchFactor必须测试当前标记是否为(Literal或者Name都是从Token基类派生的).
问题是:
 
我现在需要检查流中当前令牌的类型是什么,以及它是否与语法匹配.如果没有,抛出EParseError异常.如果是,则相应地采取行动以在表达式中获取其值,生成机器代码,或者在语法匹配时执行解析器需要执行的任何操作.
但是我已经阅读了很多关于在运行时检查类型并且从中做出决定,这是一个糟糕的设计™,它应该被重构为多态虚拟方法.当然,我同意这一点.
所以我的第一次尝试是type在Token基类中放置一些虚方法,这将被派生类重写并返回一些enum类型为id的类.
但是我已经看到了这种方法的缺点:从Token他们自己的令牌类派生的用户将无法添加额外的id enum,这是在库源中!: -  /目标是允许他们在需要时扩展新类型令牌的层次结构.
我也可以string从type方法中返回一些,这样可以轻松定义新类型.
但是,在这两种情况下,基本类型的信息都会丢失(只有叶子类型从type方法返回),当有人从它派生并且覆盖它以返回其他内容时,Parser类将无法检测Literal派生类型type比"Literal".
当然,这个Parser类也是用户扩展的(也就是说,编写自己的解析器,识别自己的标记和语法)并不知道Token将来会有什么类的后代.
许多有关设计的常见问题解答和书籍建议在此场景中采用需要按类型决定的代码中的行为,并将其放入派生类中的虚拟方法覆盖中.但我无法想象如何将这种行为放入Token后代,因为例如,生成机器代码或计算表达式不是他们的业务.此外,语法的某些部分需要匹配多个令牌,因此没有一个特定的令牌可以将该行为放入其中.这是特定语法规则的责任,它可以匹配多个令牌作为其终端符号. …
我有一个理论上的问题,但是在设计类时我有时会遇到这个问题,而且在阅读其他代码时我看到它有所不同.以下哪项会更好,为什么:
例1:
class Color
{
public:
  Color(float, float, float);
  ~Color();
  friend bool operator==(Color& lhs, Color& rhs);
  void multiply(Color);
  // ...
  float get_r();
  float get_g();
  float get_b();
private:
  float color_values[3];
}
例2:
class Color
{
public:
  // as above
private:
  float r;
  float g;
  float b;
}
在这样的情况下是否应该遵循一般规则,还是仅仅取决于程序员以及看起来更有意义?
当我开始编写代码时,我是编程的初学者,我开始编写并解决问题.我在一个主函数中编写整个程序.我不知道何时上课和功能.
为了学习这些概念,我读了哪些好书?
Q1.在我的大学对面向对象建模和设计的研究中,他们建议考虑对象可以为其方法做什么,以及它对其属性的责任.所有澄清的尝试都导致了进一步的混乱.
这往往会生成一个类图,其中包含具有所有操作的actor,以及仅包含数据的内部类.
这似乎不正确.还有另一种思考如何建模对象的方法吗?
Q2.此外,该课程似乎强调在真实世界对应物之后对物体进行建模,但在域模型中并不一定有意义.IE浏览器.在医疗实践中,他们有,Patient: CreateAppointment(), CancelAppointment()但不是如何实施(你会修改约会集合).还有另一种思考方式吗?
示例Q1
秘书:RecordAppointment(),RecordAppointmentCancellation()
预约:时间,日期,...(没有方法)
例Q2
医生:SeePatient()
虽然SeePatient是一个用例,但它对实际类的方法没有意义.你觉得这个怎么样?
当我第一次创建一个小型C#项目的uml类图时,我遇到了一些属性问题.最后,我<<property>>在开始时将属性添加为变量.现在我想知道如何用抽象方法解决这个问题?我应该加入<<abstract>>方法吗?我做这样的事情:
-----------------------------------
|           <<abstract>>          |
|             MyClass             |
-----------------------------------
|<<property>> + a : int           |
|<<property>> + b : string        |
-----------------------------------
|<<abstract>> # Job() : void      |
|<<abstract>> # Job2() : string   |
|- SomeNonAbstractMethod() : void |
-----------------------------------
这好吗?有什么建议?