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 Object[0] or Object[0: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)
相关推荐
方安乐3 小时前
python之向量、向量和、向量点积
开发语言·python·numpy
代码AI弗森4 小时前
一文理清楚“算力申请 / 成本测算 / 并发评估”
java·服务器·数据库
Old Uncle Tom5 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
小小小米粒5 小时前
Collection单列集合、Map(Key - Value)双列集合,多继承实现。
java·开发语言·windows
摇滚侠5 小时前
expdp 查看帮助
java·数据库·oracle
czhc11400756635 小时前
C# 428 线程、异步
开发语言·c#
:1216 小时前
java基础
java·开发语言
SilentSamsara6 小时前
Python 环境搭建完整指南:从下载安装到运行第一个程序
开发语言·python
曹牧7 小时前
Spring:@RequestMapping注解,匹配的顺序与上下文无关
java·后端·spring
daixin88487 小时前
cursor无法正常使用gpt5.5等模型解决方案
java·redis·cursor