dir 内置函数

变量,数据,函数都是对象

In [9]: def demo():
...: """这个是测试函数"""
...: print("123")
...:

In [10]:dir(demo)  #使用内置函数dir传入标志符/数据,可以查看对象内的所有属性和方法

In [10]: demo.__doc__
Out[10]: '这个是测试函数'

__方法名__

__new__ 创建对象时,会被自动调用

__init__ 对象被初始化时,会被自动调用

__del__ 对象被从内存中销毁时,会被自动调用

__str__ 返回对象的描述信息,print函数输出使用

定义简单的类(只包含方法)

class 类名:

  def 方法1(self, 参数列表):

    pass

  def 方法2(self, 参数列表):

    pass

对象变量 = 类名()

ddd 调用rpc 写在哪一层_创建对象

ddd 调用rpc 写在哪一层_类名_02

1 class Cat :
 2     def eat(self):
 3         print("猫爱吃鱼")
 4     def drink(self):
 5         print("猫爱喝水")
 6 tom = Cat()
 7 tom.drink()
 8 tom.eat()
 9 print(tom)
10 addr = id(tom)
11 print("%d" % addr)
12 print("%x" % addr)
13 
14 猫爱喝水
15 猫爱吃鱼
16 <__main__.Cat object at 0x00000000012FB438>
17 19903544
18 12fb438

引用

%d 十进制  %x 十六进制

ddd 调用rpc 写在哪一层_创建对象

ddd 调用rpc 写在哪一层_类名_02

1 class Cat:
 2     def eat(self):
 3         print("猫爱吃鱼")
 4     def drink(self):
 5         print("猫爱喝水")
 6 # 创建猫对象
 7 tom = Cat()
 8 tom.name = "Tom"
 9 tom.drink()
10 tom.eat()
11 print(tom)
12 # 再次创建猫对象
13 lazy_cat = Cat()
14 lazy_cat.name = "大懒猫"
15 lazy_cat.drink()
16 lazy_cat.eat()
17 print(lazy_cat)
18 lazy_cat2 = lazy_cat
19 print(lazy_cat2)
20 
21 猫爱喝水
22 猫爱吃鱼
23 <__main__.Cat object at 0x0000000004414E48>
24 猫爱喝水
25 猫爱吃鱼
26 <__main__.Cat object at 0x00000000043E3F28>

临时设置对象属性

方法中的self参数

哪一个对象调用的方法,self就是哪一个对象的引用
在类封装的方法内部,self就表示当前调用方法的对象自己
调用方法时,程序员不需要传递self参数
在方法内部
可以通过self.访问对象的属性
也可以通过self.调用其他的对象方法

ddd 调用rpc 写在哪一层_创建对象

ddd 调用rpc 写在哪一层_类名_02

1 class Cat:
 2     def eat(self):
 3         # 哪一个对象调用的方法,self就是哪一个对象的引用
 4         print("%s爱吃鱼" % self.name)
 5     def drink(self):
 6         print("猫爱喝水")
 7 # 创建猫对象
 8 tom = Cat()
 9 # 可以使用.属性名,利用赋值语句就可以
10 tom.name = "Tom"
11 tom.drink()
12 tom.eat()
13 print(tom)
14 # 再次创建猫对象
15 lazy_cat = Cat()
16 lazy_cat.name = "大懒猫"
17 lazy_cat.drink()
18 lazy_cat.eat()
19 print(lazy_cat)
20 lazy_cat2 = lazy_cat
21 print(lazy_cat2)
22 
23 猫爱喝水
24 Tom爱吃鱼
25 <__main__.Cat object at 0x0000000004294E10>
26 猫爱喝水
27 大懒猫爱吃鱼
28 <__main__.Cat object at 0x0000000004294EB8>
29 <__main__.Cat object at 0x0000000004294EB8>

设置对象属性

不推荐在类的外部给对象增加属性

如果在运行时,没有找到属性,程序会报错

对象应该包括哪些属性,应该封装在类的内部

初始化方法

类名()创建对象时 1:为对象咋内存中分配空间--创建对象 2: 为对象属性设置 初始值--初始化放放init

__init__定义一个类具有哪些属性的方法

如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造

1:把希望设置的属性值,定义成__init__方法的参数

2:在方法内部使用self.属性 = 形参 接收外部传递的参数

3:在创建对象时,使用类名(属性1,属性2..)调用

ddd 调用rpc 写在哪一层_创建对象

ddd 调用rpc 写在哪一层_类名_02

class  Cat:
    def __init__(self, new_name):
        #print("这是一个初始化方法")
        # self.属性 = 形参
        self.name = new_name
        print("%s名字" % self.name)
# 使用类名() 创建对象时,自动调用__init__
tom = Cat("Tom")
lazy_cat = Cat("大懒猫")

初始化的同时设置初始值

内置方法和属性

当一个对象从内存中销毁前,会自动调用__del__方法

使用print输出对象变量,默认情况下回输出这个变量引用的对象 是由哪一个类创建的对象,以及在内存中的地址(十六进制)

希望看到自定义的信息,可以使用__str__方法 返回一个字符串

ddd 调用rpc 写在哪一层_创建对象

ddd 调用rpc 写在哪一层_类名_02

class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s来了" % self.name)
    def __del__(self):
        print("%s 我去了" % self.name)

# tom 是一个全局变量
tom = Cat("Tom")
print(tom.name)
# del 关键字可以删除一个对象,调用__del__方法
del tom
print("-" * 50)

del

Tom来了
Tom
Tom 我去了
--------------------------------------------------

ddd 调用rpc 写在哪一层_创建对象

ddd 调用rpc 写在哪一层_类名_02

class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s来了" % self.name)
    def __del__(self):
        print("%s 我去了" % self.name)
    def __str__(self):
        return "我是小猫[%s]" % self.name

# tom 是一个全局变量
tom = Cat("Tom")
print(tom)

str

Tom来了
我是小猫[Tom]
Tom 我去了