# 1. 写出输出结果
class MyClass:
class_name = "xiaobai"
def __init__(self,*args):
if args:
self.class_name = args[0]
def print_name(self):
print("this class name: {}".format(self.class_name))
@staticmethod
def print_name_stc():
print("this class name:{}".format(MyClass.class_name))
@classmethod
def print_name_cls(cls):
print("this class name:{}".format(cls.class_name))
my_class = MyClass("xiaohei")
my_class.print_name() # xiaohei
my_class.print_name_cls() # xiaobai
my_class.print_name_stc() # xiaobai
MyClass.print_name_cls() # xiaobai
MyClass.print_name_stc() # xiaobai
# MyClass.print_name() # TypeError: print_name() missing 1 required positional argument: 'self'
# 2.写出输出
class A:
x = 5
s = "aaa"
def __init__(self):
self.x = 8
class B(A):
def __init__(self):
self.s = "bbb"
a = A()
a.x = 9
b = B()
print(a.x, a.s)
print(b.x, b.s)
# 9 aaa
# 5 bbb
# b是B的对象,实例,B继承于A,b.x在B类里没有这个属性,往上找, 去父类A里面找
# 3.
x=1
y=2
c=3
n=0
print(x and y and c)
print(x or y or c)
print(n and x and y and c)
print(n or x or y or c)
# answer:
print(x and y and c)
>>> 1 and 2 and 3
3
print(x or y or c)
>>> 1 or 2 or 3
1
print(n and x and y and c)
>>> 0 and 1 and 2 and 3
0
print(n or x or y or c)
>>> 0 or 1 or 2 or 3
1
# 拓展
>>> 0 or 0 or 1 or 2
1
# 变量非0为True 0为False
# or中, 至少有一个非0时,返回第一个非0
# and中含0,返回0; 均为非0 True时,返回后一个值
my_class .print_name()的结果 xiaohei
my_class 是MyClass的实例对象 在创建类对象时就会调用init方法进行初始化
xiaohei 通过初始化方法传入 *args
if *agrs: 如果存在
self.class_name=agr[0] 索引去第一个元素 xiaohei
my_class .print_name_cls() 结果: xiaobai
实例对象 调用的类方法(cls) cls是类本身 类里面的class_name = xiaobai
my_class .print_name_stc() 类的class_name 属性 xiaobai
MyClass .print_name_cls() xiaobai 类 调用 类方法
MyClass .print_name_stc() xiaobai 类 调用静态方法
MyClass .print_name() xiaobai 类 访问 类属性
实例方法、静态方法和类方法
方法包括:实例方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。
实例方法:由对象调用;至少一个self参数;执行实例方法时,自动将调用该方法的对象赋值给self;
类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类赋值给cls;
静态方法:由类调用;无默认参数;
对比
相同点:对于所有的方法而言,均属于类,所以 在内存中也只保存一份
不同点:方法调用者不同、调用方法时自动传入的参数不同。