파이썬에서 속성과 eval ()의 마법 사용

Java 프로그래밍 언어를 배운 친구들은 모두 Java 언어 학습 과정에서 클래스 속성의 getter 및 setter 메서드를 배울 것임을 알아야합니다. 그렇다면 파이썬에 비슷한 방법이 있습니까? 대답은 '예'입니다.

오늘의 공유 내용은 다음과 같습니다 : @property 데코레이터를 사용하여 Python에서 getter 및 setter 메서드를 구현하는 방법.

코드가 실제로 작동하기 전에 먼저 @property 데코레이터와 관련된 작은 지식을 이해합시다. 다음 실용적인 코드를 더 잘 이해하는 데 도움이됩니다.

1. 파이썬에는 세 가지 내장 데코레이터가 있습니다.
@staticmethod (정적 메서드)
@classmethod (클래스 메서드)
@property (설명자)
여기서 @property는 매우 유용한 구문 설탕입니다 (구문 설탕은 컴퓨터에 새로 추가되지 않은 항목을 나타냅니다. language Function,하지만 인간에게는 "달콤한"문법 일뿐입니다. "달콤한"문법이라고 애칭하는 이유는 문법적 설탕이 프로그래머에게 더 나은 코딩 스타일, 더 읽기 쉬운 코딩 방법을 제공하기 때문입니다.

@property의 가장 큰 장점은 메서드를 클래스에서 속성 호출로 전환하는 것입니다. Python의 내장 함수입니다. 클래스 메서드를 장식하는 데 자주 사용되며 속성에 액세스하여 함수를 호출하는 데 사용됩니다.

 

2. Python 코드 구현 :

1class Person:
2    def __init__(self,name,age,salary):
3        self.__name=name
4        self.__age=age
5        self.__salary=salary
6
7    def set_name(self,name):
8        self.__name=name
9
10    def get_name(self):
11        return self.__name
12
13    def set_age(self,age):
14        self.__age=age
15
16    def get_age(self):
17        return self.__age
18
19    def set_salary(self,salary):
20        self.__salary=salary
21
22    def get_salary(self):
23        return self.__salary
24
25    @property
26    def age(self):
27        return self.__age
28
29    @age.setter
30    def age(self,age):
31        self.__age=age
32
33if __name__ == '__main__':
34    p1 = Person('tom',11,1000)
35    print(p1.get_age())
36    p1.set_age(100)
37    print(p1.get_age())
38
39    print(p1.age)
40    p1.age = 28
41    print(p1.age)
42
43    #eval()的功能:将字符串str当成有效的表达式来求值并返回计算结果。如下是将字符串转换成方法名再调用:
44    def man():
45        return "good job"
46    print(eval("man")())
47
48    #eval()可以把list, tuple, dict和string相互转化,这里以list为示例进行演示:
49    list1 = "[33,2,22,11,44,55]"
50    print(type(list1))
51    list2 = eval(list1)
52    print(type(list2))
53    print(list2)
54    print(list2[0])

 

3. Python에서 읽기 전용 속성 정의

    Python에서 읽기 전용 속성을 정의하는 것은 @property가 아니며 읽기 전용 속성을 정의하는 것도 매우 간단합니다. 메서드 이름으로 정의해야하는 속성을 사용합니다 ( 예 : 26 행 : age 속성을 메서드로 정의). , 메소드 내장 데코레이터 @property에 추가하면서 메소드 이름으로 속성 이름을 계속 사용합니다 (예 : 30 행 : age 속성을 메소드로 정의하고 @ age.setter를 메소드 이름에 추가).

[The Way of Infinite Testing] 공개 계정 , [receive resources]에 대한 답장,
Python 프로그래밍 학습 리소스 건조 상품,
Python + Appium 프레임 워크 APP UI 자동화,
Python + Selenium 프레임 워크 웹 UI 자동화,
Python + Unittest 프레임 워크 API에 대한 관심을 환영합니다. 오토메이션,

리소스와 코드는 무료로 발송됩니다 ~
기사 하단에 공식 계정의 QR 코드가 있습니다. 위챗에서 스캔 만하시면됩니다.

비고 : 빅 데이터 테스트, 기능 테스트, 테스트 개발, API 인터페이스 자동화, 테스트 운영 및 유지 관리, UI 자동화 테스트 등, WeChat 검색 공개를 포함한 테스트 기술 공유에 전념하는 내 개인 공개 계정이 공식적으로 개설되었습니다. 계정 : "Wuliang The Way of Testing"또는 아래 QR 코드를 스캔하세요.

 관심을 더하고 함께 성장합시다!

추천

출처blog.csdn.net/weixin_41754309/article/details/112101514