1,定义类:class A, class A(), **class A(object)**的区别
python2中不默认继承;python3默认继承
所以 :
1, 在python2中class A, class A()是经典类(旧式类)没有继承功能;而class A(object)是新式类有继承功能
2, 在python3中,class A, class A(), class A(object)都一致默认继承object类
定义类后面没括号是自己写的类,有括号是继承的里面的父类
class A:
def testA(self):
print("class A")
# class A 在python3中可以被继承
class B(A):
def testB(self):
print("class B(A)")
b = B()
# 调用class A中的方法成功
b.testA()
b.testB()
输出
class A
class B(A)
2, 调用类和函数:a.类() 和 a.类; a.函数()和a.函数的区别
2.1 调用带()的类和不带()的类
类() : 创建实例/创建对象
类不带() : 可以理解为赋值
class A():
def testA(self):
print("testA")
# A()指向一个对象,用于创建实例或对象
print(f"id(A()) = {id(A())}, \tA() = {A()}")
# A指向一个内存地址, 表示赋值
print(f"id(A) = {id(A)}, \tA = {A}")
# 创建实例对象,用于调用类中的方法和对象
instance=A()
instance.testA()
输出
id(A()) = 2253745175128, A() = <__main__.A object at 0x0000020CBDAE3A58>
id(A) = 2253716457336, A = <class '__main__.A'>
testA---
关于赋值的进一步示例
# 关于赋值的进一步示例
a=3
print(f"id(a)={id(a)}, id(3)={id(3)}") # a和3的id地址一样
a=A # A的id赋值给a, a的id变成A,3的id不改变
print(f"id(a)={id(a)}, id(3)={id(3)}, id(A)={id(A)}")
2.2 带()的函数和不带()的函数
**- 函数不带括号时,调用的是函数本身,是整个函数体,是一个函数对象,不需要等待函数执行完成
- 函数带括号时,调用的是函数的执行结果,需等待函数执行完毕的结**
def fonction():
print("fonction---")
lst=[1,2,3,4,5]
s=sum(lst)
return s
# 调用一个函数对象fonction,不需要等函数执行完毕
print(f"fonction={fonction}, id(fonction)={id(fonction)}")
print()
# 函数fonction()调用,需要等函数执行完毕
print(f"fonction()={fonction()}")
print()
# 函数id
print(f"id(fonction())={id(fonction())}")
输出
#调用一个函数对象fonction
fonction=<function fonction at 0x0000020CBE120EA0>, id(fonction)=2253751717536
# 调用函数fonction()
fonction---
fonction()=15
# 调用函数id
fonction---
id(fonction())=140736018441488