2019-08-09 개체 대상
1. 내장 클래스 속성
#!/user/bin/env python
# -*- coding:utf-8 -*-
class Person:
num = 61
def __init__(self, name, gender, age):
self.name = name
self.gender = gender
self.age = age
def eat(self, food):
print('%s %s' % (self.name, food))
def __str__(self):
return ''
p1 = Person(' ', ' ', '23')
print(p1.__str__())
2) Repr 방법을 다시 씁니다. 이 방법의 반환값은 대응하는 인쇄 결과입니다. (형식은 문자열이어야 합니다.)
#!/user/bin/env python
# -*- coding:utf-8 -*-
class Person:
num = 61
def __init__(self, name, gender, age):
self.name = name
self.gender = gender
self.age = age
def eat(self, food):
print('%s %s' % (self.name, food))
def __repr__(self):
return ''
p1 = Person(' ', ' ', '24')
print(p1.__repr__())
주의: slots의 값을 설정하면 현재 클래스의 대상은dict 속성을 사용할 수 없습니다
print(Person.__name__)
print(Person.__doc__)
print(int.__doc__)
print(p1.__class__)
print(p1.__dict__)
print(Person.__dict__)
print(Person.__module__)
print(bool.__module__)
print(Person.__bases__)
연습:사전을 객체로 변환
with open('data', 'r', encoding='utf-8') as f:
content = json.loads(f.read())
datas = content['data']
class Data:
def __init__(self, dict1: dict):
for key in dict1:
setattr(self, key, dict1[key])
def __repr__(self):
return ''
for item in datas:
data = Data(item)
print(data.name, type(data))
print(data)
2. 사유화
3. 속성의 Getter와setter
class WriteError:
def __str__(self):
return WriteError
class Rect:
def __init__(self, length, width):
if isinstance(length, int) or isinstance(length, float):
self._length = length
else:
raise ValueError
self._width = width
self._perimeter = None
self._area = None
@property
def length(self):
return self._length
@length.setter
def length(self, value):
if not isinstance(value, int) or isinstance(value, float):
raise ValueError
if value < 0:
raise ValueError
self._length = value
@property
def width(self):
return self._width
@width.setter
def width(self, value):
if not isinstance(value, int) or isinstance(value, float):
raise ValueError
if value < 0:
raise ValueError
self._width = value
@property
def perimeter(self):
self._perimeter = (self.length+self.width)*2
return self._perimeter
@perimeter.setter
def perimeter(self, value):
raise WriteError
@property
def area(self):
self._area = self.length*self.width
return self._area
@area.setter
def area(self, value):
raise WriteError
p1 = Rect(10, 50)
print(p1.length, p1.width, p1.perimeter, p1.area)
p1.length = 20
print(p1.length, p1.width, p1.perimeter, p1.area)
4. 유형 방법과 정적 방법
1) 대상 방법 a. 어떻게 성명하는가: 직접 성명 b. 어떻게 호출하는가: 대상으로 호출하는가 c. 특징: 현재 대상을 가리키는selfd가 있다. 언제 사용하는가: 함수를 실현하는 기능이 대상 속성을 필요로 한다면 대상 방법을 사용한다.
2) 클래스 방법 a. 어떻게 설명합니까: @classmethod 뒤에 설명합니다 b. 어떻게 호출합니까: 클래스로 호출합니다. '클래스.클래스 방법()'c. 특징: 자체적인 매개 변수cls가 있어 현재 클래스를 나타낸다.이 매개 변수는 호출할 때 참조를 하지 않아도 현재 클래스를 자동으로 전달합니다.cls: 호출하는 사람이 누구를 가리키는지(대상이 가리키는 것이 대상이 대응하는 클래스를 가리키는 경우) d. 언제 사용합니까? 함수의 기능을 실현하려면 대상 속성이 필요하지 않지만 클래스의 필드가 필요하면 클래스 방법을 사용합니다
3) 정적 방법 a. 어떻게 설명합니까: @staticmethod 뒤에 설명합니다 b. 어떻게 호출합니까: 클래스를 통해 호출합니다. '클래스.정적 방법 () 'c. 특징: 기본 매개 변수 d가 없습니다. 언제 사용합니까: 함수를 실현하는 기능은 클래스도 필요 없고 대상도 필요 없습니다. 정적 방법을 사용합니다
상속
class Person:
num = 61
def __init__(self):
print('Person init')
self.name = ' '
self.age = 18
self.gender = ' '
self.__a = 10
def eat(self, food=' '):
print('{} {}'.format(self.name, food))
@classmethod
def show(cls):
print(' :%d' % cls.num)
@staticmethod
def func1():
print(' ')
def func2(self):
print(' '+self.name)
class Student(Person):
num = 10
def __init__(self):
# , super() __init__
super().__init__()
print('Student init')
self.study_id = '001'
self.class1 = 'py1904'
#
def study(self):
print(self.name+' !')
@staticmethod
def func1():
print(' ')
def func2(self):
print(' !')
# super()
# : super()
super().func2()
stu1 = Student()
print(Student.num)
print(stu1.name, stu1.age, stu1.gender)
stu1.eat()
Student.show()
print(stu1.__dict__)
Student.func1()
stu1.func2()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.