相关疑难解决方法(0)

@property装饰器如何工作?

我想了解内置函数的property工作原理.令我困惑的是,property它也可以用作装饰器,但它只在用作内置函数时才需要参数,而不是用作装饰器时.

这个例子来自文档:

class C(object):
    def __init__(self):
        self._x = None

    def getx(self):
        return self._x
    def setx(self, value):
        self._x = value
    def delx(self):
        del self._x
    x = property(getx, setx, delx, "I'm the 'x' property.")
Run Code Online (Sandbox Code Playgroud)

property的论点是getx,setx,delx和文档字符串.

在下面的代码中property用作装饰器.它的对象是x函数,但在上面的代码中,参数中没有对象函数的位置.

class C(object):
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I'm the 'x' property."""
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x
Run Code Online (Sandbox Code Playgroud)

而且,如何在 …

python properties decorator python-internals python-decorators

889
推荐指数
12
解决办法
46万
查看次数

吸气剂和二传手设计不佳吗?看到矛盾的建议

我目前正在开发一个简单的Java游戏,有几种不同的模式.我扩展了一个主要的Game类,将主要逻辑放在其他类中.尽管如此,主要的游戏类仍然非常沉重.

在快速浏览一下我的代码后,其中大部分是Getters and Setters(60%),而其余部分则是游戏逻辑真正需要的.

一些谷歌搜索声称Getters和Setters是邪恶的,而其他人声称他们是良好的OO练习和伟大的程序所必需的.

所以我该怎么做?应该是哪个?我应该为我的私人变量更改我的Getters和Setter,还是应该坚持使用它们?

java oop getter setter accessor

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

Java枚举 - 为什么使用toString而不是name

如果你在enum api中查看方法,name()它会说:

返回此枚举常量的名称,与其枚举声明中声明的完全相同.大多数程序员应优先使用toString方法,因为toString方法可能会返回一个更加用户友好的名称.此方法主要用于特殊情况,其中正确性取决于获取确切名称,该名称在不同版本之间不会有所不同.

为什么更好用toString()?我的意思是当name()已经是final时,可以覆盖toString.因此,如果您使用toString并且有人覆盖它以返回硬编码值,则整个应用程序都会关闭...另外,如果您查看源代码,则toString()方法将返回完全正确的名称.这是同一件事.

java enums

166
推荐指数
6
解决办法
17万
查看次数

.NET中的Getter和Setter声明

我想知道那些getter和setter声明之间的区别是什么,以及是否有一个首选方法(以及为什么).第一个可以由Visual Studio自动生成.其他人怎么样?谢谢

1

string _myProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)

第2

string _myProperty;

public string myProperty
{
    get { return _myProperty; }
    set { _myProperty = value; }
}
Run Code Online (Sandbox Code Playgroud)

第3

string _myProperty;

public string getMyProperty()
{
  return this._myProperty;
}

public void setMyProperty(string value)
{
  this._myProperty = value;
}
Run Code Online (Sandbox Code Playgroud)

.net c# visual-studio-2010

133
推荐指数
4
解决办法
36万
查看次数

应该为getter和setter编写单元测试吗?

我们应该为我们的吸气剂和制定者编写测试还是过度杀伤?

unit-testing

130
推荐指数
8
解决办法
6万
查看次数

ECMAScript 6课程中的getter和setter是什么?

我对ECMAScript 6类中getter和setter的重点感到困惑.什么目的?以下是我所指的一个例子:

class Employee {

    constructor(name) {
        this._name = name;
    }

    doWork() {
        return `${this._name} is working`;
    }

    get name() {
        return this._name.toUpperCase();
    }

    set name(newName){
        if(newName){ 
            this._name = newName;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

getter setter class ecmascript-6

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

吸气剂和制定者有什么意义?

可能重复:
为什么要使用getter和setter?

我已阅读的书Java,说这是好事,创建getter和setter方法的变量,如xy.例如:

public int getX(){
    return x;
}

public void setX(int x){
    this.x = x;
}
Run Code Online (Sandbox Code Playgroud)

但与此有什么不同

...(shape.x)...   // basically getX()
Run Code Online (Sandbox Code Playgroud)

shape.x = 90;    // basically setX()
Run Code Online (Sandbox Code Playgroud)

如果选手和吸气器更好,你能解释一下会出现什么样的实际问题吗?

java getter setter

74
推荐指数
4
解决办法
9万
查看次数

在Java中填充布尔数组

作为一个相当绿色的Java编码器,我为自己设置了一个尝试编写简单文本冒险的巨大挑战.不出所料,我已经遇到了困难!

我正在尝试为我的Location类提供一个属性来存储它包含的出口.我为此使用了一个布尔数组,基本上保存表示每个出口的true/false值.我并不完全相信

a)这是最有效的方法

b)我正在使用正确的代码来填充数组.

我会很感激任何和所有的反馈,即使它是一个完整的代码超载!

目前,在实例化一个Location时,我会生成一个String,我将其发送到setExits方法:

    String e = "N S U";
    secretRoom.setExits(e);
Run Code Online (Sandbox Code Playgroud)

在Location类中,setExits如下所示:

public void setExits(String e) {
    if (e.contains("N"))
        bexits[0] = true;
    else if (e.contains("W"))
        bexits[1] = true;
    else if (e.contains("S"))
        bexits[2] = true;
    else if (e.contains("E"))
        bexits[3] = true;
    else if (e.contains("U"))
        bexits[4] = true;
    else if (e.contains("D"))
        bexits[5] = true;
}
Run Code Online (Sandbox Code Playgroud)

我会说实话,我认为这看起来特别笨重,但我想不出另一种方法.我现在还不完全确定如何编写getExits方法......

欢迎任何帮助!

java arrays

72
推荐指数
6
解决办法
9663
查看次数

readonly修饰符和私有setter之间哪个更好?

我一直在努力创建一个课程,突然想到了两个代码之间有什么区别:

public readonly string ProductLocation;
Run Code Online (Sandbox Code Playgroud)

public string ProductLocation
{
     get;
     private set;
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我什么时候更好地使用以下内容吗?谢谢.

c# readonly private-members

60
推荐指数
4
解决办法
1万
查看次数

Allen Holub写道"你永远不应该使用get/set函数",他是否正确?

Allen Holub写了以下内容,

如果没有一些耦合,你就无法拥有一个程序.尽管如此,您可以通过盲目地遵循OO(面向对象的)规则来最大限度地减少耦合(最重要的是对象的实现应该完全隐藏在使用它的对象之外).例如,对象的实例变量(非常量的成员字段)应始终为私有.期.没有例外.永远.我是认真的.(您可以偶尔有效地使用受保护的方法,但受保护的实例变量是令人厌恶的.)

这听起来很合理,但他继续说,

你不应该出于同样的原因使用get/set函数 - 它们只是过于复杂的方式使字段公开(尽管返回完整对象而不是基本类型值的访问函数在返回对象的情况下是合理的class是设计中的关键抽象).

坦率地说,这对我来说听起来很疯狂.

我理解信息隐藏的原理,但是如果没有访问器和更改器,你根本就不能使用Java bean.我不知道如何在模型中没有访问器的情况下遵循MVC设计,因为模型不能负责渲染视图.

但是,我是一名年轻的程序员,而且我每天都在学习更多关于面向对象设计的知识.也许拥有更多经验的人可以在这个问题上权衡.

Allen Holub的文章供参考


相关问题:

language-agnostic oop getter setter immutability

50
推荐指数
7
解决办法
8816
查看次数