Special method in class

We have seen what class is in the previous sectioin. In the following chapters, we will see several conponents of class.

1. What is special method?

init(self) is a special method. A special method is typically wrapped by two _ on both sides. The special method is actually a common function, yet, will be call by the interpreter instead of you. For example, the init() method will be called by the interpreter when the class is instantiated.

For more examples, when you implement print() function to an object, the**str()** function will be called automatically and return a string which can be used to showed on the screen by print() funciton.

2. Frequently-used special methods.

When we define a class, we always need to use some special methods including

|-------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| init(self, ...) | The method will be called when a class is instantiated , and it is responsible for initializing some attributes. |
| str(self) | When you implement print(Object) and str(Object) , the method will be called and return a string that you define. |
| repr(self) | When you implement repr(Object) or the Object is in a list which is printed , the method will be called. Then return a string which you define. |
| add(self, ...) | This method is used for operator overload . We can just use**+** operator between numbers before. But if we define the add method, we can use**+operator between our class. |
| getitem(self) | When we use Object0 or Object0:2 or for i in Object, the method will be called. |
| len(self) | We can define the length of a class. When
len(Object)** is implemented, the method will be called and return an integral . You can define what is the length of your class. |
| call(self, ...) | We can use the class as a function relying on the method. We will specify it later. |

3. init(self, ...)

We use this method to initialize the class member variables(attributes).

Supposed that we has a class named Car which contains 3 attributes , we can use the init method to initialize the instantiation.

python 复制代码
class Car:
    def __init__(self, speed, weight, height):
        self.speed = speed
        self.weight = weight
        self.height = height

# self.speed is the attribute and defferent from the speed arguments passed from outside.

4. str and repr

The str is the abbrevition of string and typically used to transform your class into a string represtion . The repr is typically used to generate a string prompt of your class.

python 复制代码
class Car:
    def __init__(self, speed, weight, height):
        self.speed = speed
        self.weight = weight
        self.height = height
    
    def __str__(self):
        return f"{self.speed} , {self.weight} , {self.height}"

    def __repr__(self):
        return f"Car({self.speed} , {self.weight} , {self.height})"

# __str__ and __repr__ are very similar.
# __str__ is mainly used by user and __repr__ is mainly used by developer.

5. getitem, if you don't know list, skip this part

You must have used

python 复制代码
a = [1, 2, 3]
print(a[1])

You can exert a for loop on range(0, 3) because the range(0, 3) will return a list.

But you can't exert a for loop like that:

python 复制代码
car1 = Car(10)

print(car[0])

Your class Car cannot be used like because you didn't define the getitem method in you class Car, so the for loop doesn't know where and how to get a list . You must define a getitem method which can return a list and then when the forloop is implemented the car1 will return a list to the for loop.

python 复制代码
class Car:
    def __init__(self, speed):
        self.speed = speed

    def __getitem__(self):
        return [1,2,3]

Then

python 复制代码
car1 = Car(10)
print(car1[0])
print(car1[1])
print(car1[2])

6. add , sub , mul

After you define the 3 method, you can exert + - and * operator on you object car

python 复制代码
class Car:
    def __init__(self, speed):
        self.speed = speed

    def __add__(self, other): #-------------------------> other is another car object
        return Car(self.speed + other.speed)

    def __sub__(self, other): #-------------------------> other is another car object
        return Car(self.speed - other.speed)

    def __mul__(self, other): #-------------------------> other is another car object
        return Car(self.speed * other.speed)

    def __str__(self):    #-----------------------------> remember? we can print the car througth method
        return "speed: {0}".format(self.speed)

Then

python 复制代码
car1 = Car(10)
car2 = Car(20)

print(car1 + car2)
print(car1 - car2)
print(car1 * car2)
相关推荐
plainGeekDev1 小时前
ButterKnife → ViewBinding
android·java·kotlin
像我这样帅的人丶你还17 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩17 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia17 小时前
Mybatis的日志输入
java
亦暖筑序19 小时前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户298698530141 天前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao1 天前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿1 天前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试
鹤望兰6751 天前
字节跳动国际支付-后端开发-三面面经
java
Flittly1 天前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring