Python - 数字联盟 - 面试题

# 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;

静态方法:由类调用;无默认参数;

对比

相同点:对于所有的方法而言,均属于类,所以 在内存中也只保存一份

不同点:方法调用者不同、调用方法时自动传入的参数不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值