문제

생각했을 사용하여 이러한 용어/는 잘못!

도움이 되었습니까?

해결책

Iain, 이것은 기본적으로 용어 질문이며,이 질문과 관련된 "언어 비유 자"태그에도 불구하고 매우 언어/환경과 관련이 있습니다.

설계 토론을 위해 속성 및 인스턴스 변수는 상호 교환 적으로 사용할 수 있습니다. 아이디어는 객체를 설명하는 데이터 항목이기 때문입니다.

특정 언어에 대해 이야기 할 때이 두 가지는 다를 수 있습니다. 예를 들어, C#에서 속성은 실제로 객체를 반환하는 함수이며 인스턴스 변수는 클래스의 비 정적 멤버 변수입니다.

다른 팁

Hershi는 이것이 언어에 따라 옳습니다. 그러나 언어 특정 답변의 흔적에 추가하기 위해 :

Python에서 인스턴스 변수는 인스턴스의 속성이며 (일반적으로) 인스턴스의 사전에서 언급 된 것입니다. 이는 모든 것이 공개되는 것을 제외하고는 Java의 멤버 또는 인스턴스 변수와 유사합니다.

속성은 getter/setter 메소드를위한 바로 가기입니다 인스턴스 변수처럼 보입니다. 따라서 다음 클래스 정의에서 (Guido 's에서 수정되었습니다. 새로운 스타일 대상 선언문):

class C(object):

    def __init__(self):
        self.y = 0

    def getx(self):
        if self.y < 0: return 0
        else: return self.y

    def setx(self, x):
        self.y = x

    x = property(getx, setx)

>>> z = C()
>>> z.x = -3
>>> print z.x
0
>>> print z.y
-3
>>> z.x = 5
>>> print z.x
5
>>> print z.y
5

y 인스턴스 변수입니다 z, x 재산입니다. (일반적으로 속성이 정의되는 경우 다른 코드가 직접 액세스하지 않도록 관련 인스턴스 변수를 모호하게하는 데 사용되는 일부 기술이 있습니다.) Python의 속성의 이점은 디자이너가 돌아 다닐 필요가 없다는 것입니다. 인스턴스 변수를 속성으로 변환하여 미래의 캡슐화가 기존 코드를 중단해서는 안됩니다 (코드가 허점을 활용하지 않는 한, 캡슐화가 수정하거나 클래스 검사 또는 다른 메타에 의존하지 않는 한, 모든 인스턴스 변수를 선점 적으로 캡슐화하십시오. -프로그래밍 기술).

이 모든 것은 디자인 수준에서 속성에 대해 이야기하는 것이 좋습니다. 어떤 유형의 캡슐화를 수행 해야하는지에 대해서는 불가지론 적입니다. 나는이 원칙이 언어 불가지론적인 것이 아니라 파이썬 옆의 언어에 적용된다고 생각한다.

C#에서 수행 된 코드 예제

public class ClassName
{
   private string variable;

   public string property
   {
      get{ return variable; }
      set { variable = value; }
   }
}

목표 C에서, 속성은 인스턴스 변수로, 과부하 된 점 연산자를 활용하여 세터와 getter를 호출 할 수 있습니다. 그래서 my.food = "Cheeseburger"는 실제로 [내 세트 푸드 : "치즈 버거"]로 해석됩니다. Objective-C가 @property 키워드를 정의하기 때문에 정의가 언어 불가지론이 아닌 또 다른 경우입니다.

어쩌면 당신이 C ++에서 처음 왔기 때문일 것입니다. 학교 시절에 나는 교수들에게 수업 속성이나 계급이 항상 방해를 당했다고 말한 교수들을 가졌다. Java C# World로 이사 한 이후로 회원들에 대해 듣기 시작했습니다. 클래스 멤버, 인스턴스 회원 ...

그리고 속성 Apear! Java 및 .NET에서. 그래서 나는 당신이 그것을 회원이라고 부르는 것이 더 낫다고 생각합니다. Wheather 그들은 인스턴스 멤버 (또는 인스턴스 변수라고 불리는대로) 또는 클래스 멤버입니다 ....

건배!

속성은 인스턴스 변수를 반환 할 수 있지만 더 많은 것을 할 수 있습니다. 속성에 논리를 넣거나 값을 집계하거나 다른 인스턴스 변수 등을 업데이트 할 수 있습니다. 그러나 그렇게하지 않는 것이 가장 좋습니다. 논리는 방법으로 들어가야합니다.

Java에는 우리에게는 무언가가 있습니다 Javabeans 속성, 그러나 이것은 기본적으로 Getter 및 Setter의 특정 명명 패턴을 따르는 인스턴스 변수입니다.

C#과 같은 Langauge에서, 속성은 본질적으로 Get and Set 기능입니다. 결과적으로 Geting/설정 외에도 실행되는 사용자 정의 로직이있을 수 있습니다. 인스턴스 변수는 이것을 할 수 없습니다.

속성은 객체와 관련된 일종의 데이터입니다. 예를 들어, 원의 속성은 직경이고 다른 하나는 영역입니다.

인스턴스 변수는 객체 내에 저장된 데이터 조각입니다. 반드시 부동산과 직접 해당 할 필요는 없습니다. 예를 들어 (HEH)의 경우 원은 반경을 인스턴스 변수에 저장하고 해당 반경을 기준으로 직경과 면적을 계산할 수 있습니다. 세 가지 모두 여전히 속성이지만 반경 만 인스턴스 변수에 저장됩니다.

일부 언어에는 "일류"속성이라는 개념이 있습니다. 이는 클라이언트 응용 프로그램에있어 속성이 인스턴스 변수처럼 보이고 사용됨을 의미합니다. 즉, 같은 글을 쓰는 대신입니다 circle.getDiameter(), 당신은 쓸 것입니다 circle.diameter, 대신 circle.setRadius(5), 당신은 쓸 것입니다 circle.radius = 5.

대조적으로 다른 답변 주어, 생각이 있는 유용한 사이 구분 구성원 변수와 특성은 언어가 있습니다.

구에서 가장 명백한 구성 요소를 지향 프로그래밍,유용하다,어디서든지 이해하기 쉬운 그래픽 UI.그런 맥락에서,내가 생각하는 경향이 디자인의 시간 구성의 구성요소로 조작하기"속성"개인정보 보호에 최적합니다.예를 들어,내가 선택한 전경색 및 배경색,테두리 스타일,그리고 글꼴의 텍스트 입력에 의해 현장 속성을 설정.는 동안 이들 특성 런타임에 변경될,그들은 일반적으로하지 않습니다.At runtime,다른 변수를 나타내는 콘텐츠 필드,은 훨씬 더 가능성이 읽고 기록됩니다.내 생각으로 이 정보를"주"의 구성 요소입니다.

왜 이것이 구별을 유용한가?을 만들 때를 위한 추상화 배선 구성 요소를 함께,일반적으로만"주"변수가 될 필요가 노출됩니다.로 돌아가 텍스트 필드를 들어,당신이 선언할 수 있습니다 인터페이스에 대한 액세스를 제공하는 현재의 콘텐츠입니다.그러나"속성"제어하는 모양과 느낌의 구성요소에만에 정의된 구체적인 구현 클래스입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top